/* 🟢 Full file: override.css v2025-11-07SR1 + hamburger animations (append-only) */
/* OkObserver override.css — v=2025-11-06SR1-gridLock1 (compatible with hotfix3) */
/* Keep existing visual identity; add tiny polish + focus states + hover softness */

/* Base */
:root{
  --oko-blue:#1E90FF;
  --oko-gap:18px;            /* small bump for clearer column separation */
  --oko-card-radius:14px;
  --oko-shadow:0 2px 10px rgba(0,0,0,.08);
  --oko-shadow-hover:0 6px 20px rgba(0,0,0,.14);
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,"Helvetica Neue",Arial,sans-serif;
  color:#111;
  background:#f7f8fa;
}

/* Header */
.oo-header{
  position:sticky;top:0;z-index:1000;
  background:linear-gradient(0deg,#1E90FF,#1E90FF);
  color:#fff;
  padding:.5rem 1rem;
  box-shadow:0 1px 10px rgba(0,0,0,.12);
}
.oo-brand{display:flex;align-items:center;gap:.75rem}
.oo-logo{width:28px;height:28px;border-radius:6px}
.oo-title{display:flex;flex-direction:column}
.oo-name{margin:0;font-size:1.125rem;line-height:1.2}
.oo-motto{margin:2px 0 0;font-size:.8rem;opacity:.95}
.oo-menu{
  margin-left:auto;border:0;background:transparent;color:#fff;
  font-size:1.35rem;line-height:1;padding:.25rem .5rem;border-radius:10px;cursor:pointer
}
.oo-menu:focus-visible{outline:3px solid #fff;outline-offset:3px}

/* Nav */
.oo-nav{display:flex;gap:1rem;padding:.5rem 0}
.oo-nav a{color:#fff;text-decoration:none;opacity:.95}
.oo-nav a:focus-visible{outline:2px dashed #fff;outline-offset:3px;border-radius:6px}

/* App shell */
.oo-app{max-width:1200px;margin:1rem auto;padding:0 1rem}

/* GRID */
.oo-grid{
  display:grid;
  grid-template-columns:1fr;
  gap:var(--oko-gap);
}
@media (min-width:768px){
  .oo-grid{grid-template-columns:repeat(3,1fr)}
}
@media (min-width:1024px){
  .oo-grid{grid-template-columns:repeat(4,1fr)}
}

/* Cards */
.oo-card{
  background:#fff;border-radius:var(--oko-card-radius);
  box-shadow:var(--oko-shadow);overflow:hidden;transition:transform .18s ease, box-shadow .18s ease;
}
.oo-card:hover{transform:translateY(-2px);box-shadow:var(--oko-shadow-hover)}
.oo-card:focus-within{outline:2px solid var(--oko-blue);outline-offset:2px}

/* Media */
.oo-media{
  width:100%;aspect-ratio:16/9;background:#e9eef5;
  display:block;object-fit:cover;object-position:center center;
}

/* Content */
.oo-card-body{padding:12px 14px 14px}
.oo-titlelink{color:#0a1f44;text-decoration:none}
.oo-titlelink:focus-visible{outline:2px dashed var(--oko-blue);outline-offset:3px;border-radius:6px}
.oo-titletext{margin:0 0 .35rem;font-size:1.02rem;line-height:1.25}

/* Meta (byline/tags/date) */
.oo-meta{display:flex;flex-wrap:wrap;gap:.35rem .6rem;margin:.25rem 0;color:#445}
.oo-meta .oo-byline{font-weight:600}
.oo-meta .oo-date{opacity:.8}
.oo-tag{font-size:.78rem;line-height:1;border:1px solid #d8deea;border-radius:999px;padding:.2rem .45rem;background:#f4f7fb}

/* Excerpt */
.oo-excerpt{margin:.5rem 0 0;color:#1a2233}

/* Footer */
.oo-footer{
  text-align:center;font-size:.9rem;color:#556;
  padding:2rem 1rem 3rem
}

/* Accessibility focus baseline for interactive pieces inside cards */
a:focus-visible, button:focus-visible{outline:2px solid var(--oko-blue);outline-offset:3px;border-radius:8px}
/* OkObserver override.css — v=2025-11-06SR1-gridLock1 (hotfix3a)
   Small, safe patch: make .oo-titlelink block to prevent collapsed content inside cards.
   Everything else unchanged from gridLock1. */

:root{
  --oko-blue:#1E90FF;
  --oko-gap:18px;
  --oko-card-radius:14px;
  --oko-shadow:0 2px 10px rgba(0,0,0,.08);
  --oko-shadow-hover:0 6px 20px rgba(0,0,0,.14);
}
*{box-sizing:border-box}
html,body{height:100%}
body{
  margin:0;
  font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,"Helvetica Neue",Arial,sans-serif;
  color:#111;
  background:#f7f8fa;
}

/* Header */
.oo-header{
  position:sticky;top:0;z-index:1000;
  background:linear-gradient(0deg,#1E90FF,#1E90FF);
  color:#fff;
  padding:.5rem 1rem;
  box-shadow:0 1px 10px rgba(0,0,0,.12);
}
.oo-brand{display:flex;align-items:center;gap:.75rem}
.oo-logo{width:28px;height:28px;border-radius:6px}
.oo-title{display:flex;flex-direction:column}
.oo-name{margin:0;font-size:1.125rem;line-height:1.2}
.oo-motto{margin:2px 0 0;font-size:.8rem;opacity:.95}
.oo-menu{
  margin-left:auto;border:0;background:transparent;color:#fff;
  font-size:1.35rem;line-height:1;padding:.25rem .5rem;border-radius:10px;cursor:pointer
}
.oo-menu:focus-visible{outline:3px solid #fff;outline-offset:3px}

/* Nav */
.oo-nav{display:flex;gap:1rem;padding:.5rem 0}
.oo-nav a{color:#fff;text-decoration:none;opacity:.95}
.oo-nav a:focus-visible{outline:2px dashed #fff;outline-offset:3px;border-radius:6px}

/* App shell */
.oo-app{max-width:1200px;margin:1rem auto;padding:0 1rem}

/* GRID */
.oo-grid{
  display:grid;
  grid-template-columns:1fr;
  gap:var(--oko-gap);
}
@media (min-width:768px){
  .oo-grid{grid-template-columns:repeat(3,1fr)}
}
@media (min-width:1024px){
  .oo-grid{grid-template-columns:repeat(4,1fr)}
}

/* Cards */
.oo-card{
  background:#fff;border-radius:var(--oko-card-radius);
  box-shadow:var(--oko-shadow);overflow:hidden;transition:transform .18s ease, box-shadow .18s ease;
}
/* make the anchor inside occupy the card to avoid collapsed content */
.oo-titlelink{display:block;color:#0a1f44;text-decoration:none}
.oo-card:hover{transform:translateY(-2px);box-shadow:var(--oko-shadow-hover)}
.oo-card:focus-within{outline:2px solid var(--oko-blue);outline-offset:2px}

/* Media */
.oo-media{
  width:100%;aspect-ratio:16/9;background:#e9eef5;
  display:block;object-fit:cover;object-position:center center;
}

/* Content */
.oo-card-body{padding:12px 14px 14px}
.oo-titletext{margin:0 0 .35rem;font-size:1.02rem;line-height:1.25}
.oo-titlelink:focus-visible{outline:2px dashed var(--oko-blue);outline-offset:3px;border-radius:6px}

/* Meta (byline/tags/date) */
.oo-meta{display:flex;flex-wrap:wrap;gap:.35rem .6rem;margin:.25rem 0;color:#445}
.oo-meta .oo-byline{font-weight:600}
.oo-meta .oo-date{opacity:.8}
.oo-tag{font-size:.78rem;line-height:1;border:1px solid #d8deea;border-radius:999px;padding:.2rem .45rem;background:#f4f7fb}

/* Excerpt */
.oo-excerpt{margin:.5rem 0 0;color:#1a2233}

/* Footer */
.oo-footer{
  text-align:center;font-size:.9rem;color:#556;
  padding:2rem 1rem 3rem
}

/* Accessibility baseline */
a:focus-visible, button:focus-visible{outline:2px solid var(--oko-blue);outline-offset:3px;border-radius:8px}
/* === hotfix3b: header + featured image alignment === */
.oo-header{
  background:#1E90FF;
  color:#fff;
  box-shadow:0 1px 10px rgba(0,0,0,.12);
}
.oo-brand{
  display:flex;
  align-items:center;
  justify-content:center;   /* centers logo + motto */
  position:relative;
}
.oo-logo{
  width:36px;
  height:36px;
  border-radius:6px;
  object-fit:contain;
  display:block;
}
.oo-title{
  display:flex;
  flex-direction:column;
  align-items:center;
  margin-left:.5rem;
}
.oo-name,.oo-motto{
  text-align:center;
  color:#fff;
}
.oo-menu{
  position:absolute;
  right:1rem;
  top:50%;
  transform:translateY(-50%);
  border:0;
  background:transparent;
  color:#fff;
  font-size:1.5rem;
  line-height:1;
  padding:.25rem .5rem;
  border-radius:10px;
  cursor:pointer;
}
.oo-menu:focus-visible{outline:3px solid #fff;outline-offset:3px}

/* featured image visibility fix */
.oo-media{
  display:block;
  width:100%;
  aspect-ratio:16/9;
  object-fit:cover;
  object-position:center;
  border-bottom:1px solid #eee;
  background:#e9eef5 url('favicon.ico') no-repeat center/contain;
}
/* === end hotfix3b === */
/* === hotfix: real back button style === */
.oo-backbtn{
  background:#1E90FF;color:#fff;border:0;border-radius:10px;
  padding:.5rem .75rem;font-size:0.95rem;cursor:pointer;
  box-shadow:0 2px 6px rgba(0,0,0,.12)
}
.oo-backbtn:hover{filter:brightness(1.05)}
.oo-backbtn:focus-visible{outline:3px solid #1E90FF;outline-offset:2px;background:#1479d8}
/* === hotfix-header-cleanup === */
/* Bigger logo, centered motto, remove visible title spacing, hamburger-only nav */

.oo-brand{
  display:flex;
  align-items:center;
  justify-content:center;   /* center logo + motto together */
  position:relative;
  gap:.6rem;
}
.oo-logo{
  width:48px;               /* larger logo */
  height:48px;
  border-radius:8px;
  object-fit:contain;
  display:block;
}
.oo-title{display:flex;flex-direction:column;align-items:center;margin:0}
.oo-name{display:none}      /* hide “The Oklahoma Observer” text */
.oo-motto{
  margin:0;
  font-size:.9rem;
  color:#fff;
  text-align:center;
  opacity:.98;
}

/* Hamburger pinned to right on all viewports */
.oo-menu{
  position:absolute; right:1rem; top:50%; transform:translateY(-50%);
  border:0; background:transparent; color:#fff;
  font-size:1.6rem; line-height:1; padding:.25rem .5rem; border-radius:10px; cursor:pointer;
}
.oo-menu:focus-visible{outline:3px solid #fff; outline-offset:3px}

/* Nav is hamburger-only: always hidden unless toggled (no desktop auto-show) */
.oo-nav{display:flex; flex-direction:column; gap:.5rem; padding:.5rem 1rem}
.oo-nav[hidden]{display:none !important;}
/* Optional: quick dropdown styling when opened */
#oo-nav{
  position:absolute; right:0.75rem; top:62px;
  background:rgba(255,255,255,.98); color:#0a1f44;
  border-radius:12px; box-shadow:0 8px 28px rgba(0,0,0,.18);
}
#oo-nav a{
  color:#0a1f44; text-decoration:none; padding:.5rem .75rem; border-radius:8px;
}
#oo-nav a:hover{background:#eef3ff}
#oo-nav a:focus-visible{outline:2px solid #1E90FF; outline-offset:2px;}

/* Keep */
.oo-header{background:#1E90FF;}
/* === end hotfix-header-cleanup === */
/* === hotfix3f: title + byline color === */

/* Make all post titles OkObserver blue */
.oo-titletext,
.oo-titletext a,
article h1,
article h1 a {
  color:#1E90FF !important;
}

/* Optional hover tweak */
.oo-titletext a:hover,
article h1 a:hover {
  color:#0f6ddf !important;
}
/* === hotfix3g: header + hamburger + logo size + centered motto === */

/* Center logo+motto block; pin hamburger on the right on ALL viewports */
.oo-brand{
  display:flex;
  align-items:center;
  justify-content:center;
  position:relative;
  gap:.75rem;
}

/* Bigger logo, never blurry or cropped */
.oo-logo{
  width:72px;            /* ↑ make it big */
  height:72px;
  border-radius:10px;
  object-fit:contain;
  display:block;
  background:transparent;
}

/* Motto centered directly under/next to logo block */
.oo-title{
  display:flex;
  flex-direction:column;
  align-items:center;
  margin:0;
}
.oo-name{ display:none }  /* keep name hidden per your spec */
.oo-motto{
  margin:0;
  font-size:0.95rem;
  line-height:1.25;
  color:#fff;
  text-align:center;
  opacity:.98;
}

/* Hamburger button: fixed hit area, high z-index, desktop included */
.oo-menu{
  position:absolute;
  right:1rem;
  top:50%;
  transform:translateY(-50%);
  border:0;
  background:transparent;
  color:#fff;
  font-size:1.7rem;
  line-height:1;
  padding:.4rem .55rem;   /* larger tap target */
  border-radius:12px;
  cursor:pointer;
  z-index: 1002;          /* above dropdown container */
}
.oo-menu:focus-visible{outline:3px solid #fff; outline-offset:3px}

/* Hamburger menu dropdown: hidden unless toggled, overlays content */
#oo-nav[hidden]{ display:none !important; }
#oo-nav{
  position:absolute;
  right:0.75rem;
  top:calc(100% + 8px);   /* sits below header bar */
  z-index:1001;
  background:rgba(255,255,255,.98);
  color:#0a1f44;
  border-radius:12px;
  box-shadow:0 10px 30px rgba(0,0,0,.22);
  padding:.5rem;
  min-width:160px;
}
#oo-nav a{
  display:block;
  color:#0a1f44;
  text-decoration:none;
  padding:.5rem .75rem;
  border-radius:8px;
  white-space:nowrap;
}
#oo-nav a:hover{ background:#eef3ff }
#oo-nav a:focus-visible{ outline:2px solid #1E90FF; outline-offset:2px }

/* Ensure the header sits above the page */
.oo-header{ position:sticky; top:0; z-index: 1000; background:#1E90FF; }
/* === hotfix3g: header + hamburger + logo size + centered motto (force) === */
.oo-header .oo-brand{display:flex;align-items:center;justify-content:center;position:relative;gap:.75rem}
.oo-header .oo-logo{width:72px;height:72px;border-radius:10px;object-fit:contain;display:block;background:transparent}
.oo-header .oo-title{display:flex;flex-direction:column;align-items:center;margin:0}
.oo-header .oo-name{display:none}
.oo-header .oo-motto{margin:0;font-size:.95rem;line-height:1.25;color:#fff;text-align:center;opacity:.98}

/* Hamburger + dropdown hardening */
.oo-header .oo-menu{position:absolute;right:1rem;top:50%;transform:translateY(-50%);border:0;background:transparent;color:#fff;font-size:1.7rem;line-height:1;padding:.4rem .55rem;border-radius:12px;cursor:pointer;z-index:1002}
#oo-nav[hidden]{display:none !important}
#oo-nav{position:absolute;right:.75rem;top:calc(100% + 8px);z-index:1001;background:rgba(255,255,255,.98);color:#0a1f44;border-radius:12px;box-shadow:0 10px 30px rgba(0,0,0,.22);padding:.5rem;min-width:160px}
#oo-nav a{display:block;color:#0a1f44;text-decoration:none;padding:.5rem .75rem;border-radius:8px;white-space:nowrap}
#oo-nav a:hover{background:#eef3ff}
/* === hotfix3i: Logo scaling + centered motto === */
.oo-header .oo-brand{
  display:flex !important;
  flex-direction:column !important;   /* stacks vertically */
  align-items:center !important;
  justify-content:center !important;
  position:relative !important;
  padding:.35rem 3.5rem .5rem !important;
  gap:.4rem !important;
}

/* Allow a wide horizontal logo to scale responsively */
.oo-header .oo-logo{
  max-width:420px !important;   /* increase total width shown */
  width:90% !important;
  height:auto !important;       /* keep natural ratio */
  border-radius:12px !important;
  object-fit:contain !important;
  display:block !important;
  margin:0 auto !important;
  background:transparent !important;
}

/* Motto centered beneath logo */
.oo-header .oo-title{
  display:flex !important;
  flex-direction:column !important;
  align-items:center !important;
  margin:0 !important;
}
.oo-header .oo-motto{
  margin:.25rem 0 0 0 !important;
  font-size:1rem !important;
  line-height:1.3 !important;
  color:#fff !important;
  text-align:center !important;
  opacity:.98 !important;
}
/* === hotfix3k: mobile header fit + dropdown === */

/* Prevent any header overflow on small screens */
.oo-header{ overflow:hidden; }

/* Mobile: keep logo inside the header even with the hamburger present */
@media (max-width: 768px){
  .oo-header .oo-brand{ padding: .5rem 3.25rem .6rem 1rem !important; } /* room for hamburger on right */
  .oo-header .oo-logo{
    width: min(88vw, 520px) !important;                 /* responsive cap */
    max-width: calc(100vw - 4.25rem) !important;        /* 4.25rem ≈ right padding + button */
    height: auto !important;
  }
  /* dropdown sits fully on-screen */
  #oo-nav{
    right: .5rem !important;
    top: calc(100% + 6px) !important;
    min-width: 68vw !important;
  }
}

/* Improve dropdown layering and hit behavior on all sizes */
#oo-nav[hidden]{ display:none !important; }
#oo-nav{ z-index:1001 !important; }
.oo-menu{ z-index:1002 !important; -webkit-tap-highlight-color:transparent; }
/* === hotfix3m: prevent featured image cropping on post detail === */

/* Detail page: featured image should scale, never crop */
#app article > img.oo-media {
  display: block;
  width: 100%;
  height: auto;           /* natural aspect ratio */
  object-fit: contain;    /* don't crop */
  object-position: center;
  max-height: none;       /* override any caps */
  border-radius: 10px;    /* keep your soft edges */
}

/* Safety: if any container forces overflow/clipping, allow it to grow */
#app article,
#app article > div,
#app .post-detail,
#app .post-content {
  overflow: visible !important;
}

/* Optional: margin below image for breathing room */
#app article > img.oo-media { margin: 0 0 0.75rem 0; }
/* === hotfix3n: hide favicon placeholder until featured image loads === */
#app article > img.oo-media:not([src*="wp-content"]) {
  visibility: hidden;
}
#app article > img.oo-media[src*="wp-content"] {
  visibility: visible;
}
/* === hotfix: detail image edge-to-edge, no frame === */
#app article .oo-media {
  display: block;
  width: 100%;
  max-width: none;
  height: auto;              /* keep natural aspect ratio */
  object-fit: contain;       /* no cropping */
  object-position: center;
  margin: 0;                 /* remove gaps that look like borders */
  background: transparent !important;
  box-shadow: none !important;
  border: none !important;
  outline: none !important;
  border-radius: 0 !important; /* remove ‘card’ rounding on detail image */
}

/* ensure the immediate wrapper doesn't add a 'frame' via padding/bg */
#app article {
  background: transparent !important;
  padding-left: 0;
  padding-right: 0;
}
#app article > *:first-child.oo-media {
  margin-top: 0;
}
#app article > *:last-child {
  margin-bottom: 0.75rem; /* breathing room below content */
}

/* If your global card rules target .oo-card img, make sure they don't hit detail */
.oo-card .oo-media {
  cursor: pointer;
border-radius: 10px;       /* keep summary cards pretty */
  box-shadow: var(--card-shadow, 0 2px 10px rgba(0,0,0,.08));
}

/* Optional: if the article body has inner padding, allow image to span edge-to-edge */
#app article .post-content,
#app article .entry-content {
  padding-left: 0 !important;
  padding-right: 0 !important;
}
/* === videoR1: responsive click-to-play players === */
.oo-video {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: #000;
  overflow: hidden;
  border-radius: 10px;
  box-shadow: 0 2px 10px rgba(0,0,0,.08);
}
.oo-video-poster {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.oo-video-play {
  position: absolute;
  inset: 0;
  margin: auto;
  width: 72px;
  height: 72px;
  border-radius: 50%;
  border: 0;
  background: rgba(30,144,255,.92);
  color: #fff;
  font-size: 30px;
  line-height: 72px;
  text-align: center;
  cursor: pointer;
  box-shadow: 0 8px 30px rgba(0,0,0,.25);
}
.oo-video-iframe,
.oo-video-elem {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9;
  display: block;
  border: 0;
  border-radius: 10px;
}

/* Detail image: edge-to-edge, no frame (keeps no-crop) */
#app article .oo-media {
  display:block;width:100%;max-width:none;height:auto;object-fit:contain;object-position:center;
  margin:0;background:transparent!important;box-shadow:none!important;border:none!important;border-radius:0!important;
}
/* OkObserver Styles — 2025-11-06SR1-gridLock1-hotfix3n + videoR1 inserts */

/* Base */
:root { --okobs-blue:#1E90FF; --okobs-text:#0b0b0b; --okobs-bg:#f4f6f8; }
html, body { margin:0; padding:0; background:var(--okobs-bg); color:var(--okobs-text);
  font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Inter, Arial, sans-serif; }

/* Header */
.okobs-header { position:sticky; top:0; z-index:1000; background:var(--okobs-blue); color:#fff; box-shadow:0 2px 8px rgba(0,0,0,.15); }
.okobs-header-inner { max-width:1200px; margin:0 auto; padding:12px 16px; display:flex; align-items:center; justify-content:space-between; }
.okobs-header .brand { display:flex; align-items:center; gap:12px; text-decoration:none; color:#fff; }
.okobs-header .logo { width:42px; height:42px; border-radius:6px; }
.okobs-header .motto { color:#fff; font-weight:600; opacity:.95; }
.hamburger { background:transparent; border:0; width:40px; height:32px; display:grid; place-items:center; cursor:pointer; }
.oo-hamburger span { display:block; width:22px; height:2px; background:#fff; margin:3px 0; }.menu[hidden] { display:none; }
@media (max-width:820px){
  .menu:not([hidden]){ display:flex; flex-direction:column; gap:8px; padding:8px 16px 16px; }
  .menu a{ color:#fff; text-decoration:none; font-weight:600; }
}

/* Layout */
main#app { max-width:1200px; margin:18px auto; padding:0 4px; }
.site-footer { max-width:1200px; margin:32px auto; padding:24px 16px; color:#555; font-size:14px; }

/* Grid */
.okobs-grid { display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:16px; align-items:start; }
@media (max-width:1150px){ .okobs-grid{ grid-template-columns:repeat(3, minmax(0,1fr)); } }
@media (max-width:720px){ .okobs-grid{ grid-template-columns:1fr; } }

/* Cards */
.post-card { background:#fff; border-radius:12px; box-shadow:0 2px 10px rgba(0,0,0,.06); overflow:hidden; }
.post-card img { display:block; width:100%; height:220px; object-fit:cover; }
.post-title { color:var(--okobs-blue); margin:12px 16px 0; line-height:1.25; }
.post-meta { color:#666; margin:4px 16px 0; font-size:14px; }
.post-excerpt { margin:12px 16px 16px; color:#222; }

/* Detail */
.post-detail .post-hero img { width:100%; height:auto; display:block; }
.post-detail .post-title { margin:16px 0 4px; color:var(--okobs-blue); }
.post-detail .post-meta { color:#666; margin:0 0 16px; }
.back-btn { margin:24px 0; background:var(--okobs-blue); color:#fff; border:0; border-radius:8px; padding:10px 14px; cursor:pointer; }

/* Videos (click-to-play overlay) */
.okobs-video { position:relative; width:100%; background:#000; border-radius:12px; overflow:hidden; }
.okobs-video img { display:block; width:100%; height:100%; object-fit:cover; }
.okobs-video .play-overlay { position:absolute; inset:0; display:grid; place-items:center; }
.okobs-video .play-overlay .triangle {
  width:0; height:0; border-left:22px solid #fff; border-top:14px solid transparent; border-bottom:14px solid transparent; margin-left:6px;
}
/* ==== headerLockR1 (append-only) ======================================= */
header.okobs-header{
  position:sticky; top:0; z-index:1000;
  background:#1E90FF; color:#fff;
  box-shadow:0 2px 8px rgba(0,0,0,.15);
}
header.okobs-header .okobs-header-inner{
  max-width:1200px; margin:0 auto; padding:12px 16px;
  display:flex; align-items:center; justify-content:space-between;
}
header.okobs-header a.brand{
  display:flex; align-items:center; gap:12px;
  text-decoration:none; color:#fff !important;
}
header.okobs-header img.logo{
  width:42px; height:42px; border-radius:6px; display:block;
  max-width:none !important; /* guard against global img resets */
}
header.okobs-header .motto{ color:#fff; font-weight:600; opacity:.95; }
header.okobs-header .hamburger{
  background:transparent; border:0; width:40px; height:32px;
  display:grid; place-items:center; cursor:pointer;
}
header.okobs-header .hamburger span{
  display:block; width:22px; height:2px; background:#fff; margin:3px 0;
}
header.okobs-header nav.menu[hidden]{ display:none; }
@media (max-width:820px){
  header.okobs-header nav.menu:not([hidden]){
    display:flex; flex-direction:column; gap:8px; padding:8px 16px 16px;
  }
  header.okobs-header nav.menu a{ color:#fff !important; text-decoration:none; font-weight:600; }
}
/* ====================================================================== */
/* ==== headerCenterLockR2 (append-only; forces centered, stacked brand) ==== */
header.okobs-header{
  position:sticky; top:0; z-index:1000;
  background:#1E90FF; color:#fff;
  box-shadow:0 2px 8px rgba(0,0,0,.15);
}
header.okobs-header .okobs-header-inner{
  /* Turn the header into a 3-zone bar:
     [left empty] [center brand] [right hamburger] */
  position:relative;
  display:flex; align-items:center; justify-content:center;
  max-width:1200px; margin:0 auto; padding:12px 16px;
}
header.okobs-header a.brand{
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:8px; text-decoration:none; color:#fff !important;
  text-align:center;
}
header.okobs-header img.logo{
  /* Make the “logo” large even if it’s favicon.ico for now */
  width:88px; height:88px; border-radius:12px; display:block;
  max-width:none !important;
}
header.okobs-header .motto{
  color:#fff; font-weight:600; opacity:.98; line-height:1.2;
  font-size:16px;
}
header.okobs-header .hamburger{
  position:absolute; right:16px; top:50%; transform:translateY(-50%);
  background:transparent; border:0; width:40px; height:32px;
  display:grid; place-items:center; cursor:pointer;
}
header.okobs-header .hamburger span{
  display:block; width:22px; height:2px; background:#fff; margin:3px 0;
}
/* Keep mobile menu white links */
header.okobs-header nav.menu[hidden]{ display:none; }
@media (max-width:820px){
  header.okobs-header nav.menu:not([hidden]){
    display:flex; flex-direction:column; gap:8px; padding:8px 16px 16px;
  }
  header.okobs-header nav.menu a{ color:#fff !important; text-decoration:none; font-weight:600; }
}
/* ======================================================================== */
/* ==== headerCenterLockR3 (real logo + centered motto) ==== */
header.okobs-header{
  position:sticky; top:0; z-index:1000;
  background:#1E90FF; color:#fff;
  box-shadow:0 2px 8px rgba(0,0,0,.15);
}
header.okobs-header .okobs-header-inner{
  position:relative;
  display:flex; align-items:center; justify-content:center;
  max-width:1200px; margin:0 auto; padding:16px 16px 12px;
}
header.okobs-header a.brand{
  display:flex; flex-direction:column; align-items:center; justify-content:center;
  text-align:center; text-decoration:none; color:#fff !important;
  gap:10px;
}
header.okobs-header img.logo{
  width:120px; height:auto; display:block;
  border-radius:8px; max-width:none !important;
}
header.okobs-header .motto{
  color:#fff; font-weight:600; opacity:.95; line-height:1.3;
  font-size:17px; max-width:90%;
}
header.okobs-header .hamburger{
  position:absolute; right:16px; top:50%; transform:translateY(-50%);
  background:transparent; border:0; width:40px; height:32px;
  display:grid; place-items:center; cursor:pointer;
}
header.okobs-header .hamburger span{
  display:block; width:22px; height:2px; background:#fff; margin:3px 0;
}
@media (max-width:820px){
  header.okobs-header nav.menu:not([hidden]){
    display:flex; flex-direction:column; gap:8px; padding:8px 16px 16px;
  }
  header.okobs-header nav.menu a{ color:#fff !important; text-decoration:none; font-weight:600; }
}
/* ========================================================== */
/* ==== headerCenterLockR4 (large logo + single-line centered motto) ==== */
header.okobs-header {
  position: sticky;
  top: 0;
  z-index: 1000;
  background: #1E90FF;
  color: #fff;
  box-shadow: 0 2px 8px rgba(0,0,0, 0.15);
  text-align: center;
  padding-top: 8px;
  padding-bottom: 8px;
}

header.okobs-header .okobs-header-inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
  max-width: 100%;
  margin: 0 auto;
  padding: 0;
}

/* make sure the brand centers logo + motto */
header.okobs-header a.brand {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-decoration: none;
  color: #fff !important;
  gap: 10px;
}

/* logo: large and dominant */
header.okobs-header img.logo {
  width: 200px;
  height: auto;
  display: block;
  border-radius: 8px;
  max-width: none !important;
  margin-bottom: 6px;
}

/* motto: centered single line, no wrap */
header.okobs-header .motto {
  font-size: 18px;
  font-weight: 600;
  color: #fff;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.2;
}

/* hamburger still right aligned */
header.okobs-header .hamburger {
  position: absolute;
  right: 16px;
  top: 20px;
  background: transparent;
  border: 0;
  width: 40px;
  height: 32px;
  display: grid;
  place-items: center;
  cursor: pointer;
}

header.okobs-header .hamburger span {
  display: block;
  width: 22px;
  height: 2px;
  background: #fff;
  margin: 3px 0;
}

/* keep menu behavior */
header.okobs-header nav.menu[hidden] {
  display: none;
}

@media (max-width: 820px) {
  header.okobs-header img.logo {
    width: 160px;
  }
  header.okobs-header .motto {
    font-size: 16px;
    white-space: normal;
  }
  header.okobs-header nav.menu:not([hidden]) {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 8px 16px 16px;
  }
  header.okobs-header nav.menu a {
    color: #fff !important;
    text-decoration: none;
    font-weight: 600;
  }
}
/* ========================================================== */
/* ==== headerCenterLockR5 (large logo + centered one-line motto) ==== */
header.okobs-header {
  position: sticky;
  top: 0;
  z-index: 1000;
  background: #1E90FF;
  color: #fff;
  box-shadow: 0 2px 8px rgba(0,0,0, 0.15);
  text-align: center;
  padding-top: 10px;
  padding-bottom: 10px;
}

header.okobs-header .okobs-header-inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  position: relative;
  width: 100%;
  margin: 0 auto;
  padding: 0;
}

header.okobs-header a.brand {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-decoration: none;
  color: #fff !important;
  gap: 10px;
}

header.okobs-header img.logo {
  width: 200px;
  height: auto;
  display: block;
  border-radius: 8px;
  max-width: none !important;
  margin-bottom: 6px;
}

header.okobs-header .motto {
  font-size: 18px;
  font-weight: 600;
  color: #fff;
  text-align: center;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  line-height: 1.2;
  max-width: 95%;
}

header.okobs-header .hamburger {
  position: absolute;
  right: 16px;
  top: 20px;
  background: transparent;
  border: 0;
  width: 40px;
  height: 32px;
  display: grid;
  place-items: center;
  cursor: pointer;
}

header.okobs-header .hamburger span {
  display: block;
  width: 22px;
  height: 2px;
  background: #fff;
  margin: 3px 0;
}

header.okobs-header nav.menu[hidden] {
  display: none;
}

@media (max-width: 820px) {
  header.okobs-header img.logo {
    width: 160px;
  }
  header.okobs-header .motto {
    font-size: 15px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  header.okobs-header nav.menu:not([hidden]) {
    display: flex;
    flex-direction: column;
    gap: 8px;
    padding: 8px 16px 16px;
  }
  header.okobs-header nav.menu a {
    color: #fff !important;
    text-decoration: none;
    font-weight: 600;
  }
}
/* ========================================================== */
/* ==== postBylineFixR1 (restores and boldens byline) ==== */
.post-card .byline,
.post-card .meta,
.post-card .author {
  display: block;
  font-weight: 700;           /* bold */
  color: #444;                /* readable gray tone */
  margin-top: 6px;
  margin-bottom: 4px;
  font-size: 0.95rem;
  line-height: 1.3;
}
/* === ttsMobilePolishR1: improve speaker size + tap target === */

/* Base speaker button */
.oo-tts-btn,
.oo-tts-button,
button[aria-label*="speech"],
button[aria-label*="Speak"] {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  line-height: 1;
}

/* Mobile polish only */
@media (max-width: 768px) {
  .oo-tts-btn,
  .oo-tts-button,
  button[aria-label*="speech"],
  button[aria-label*="Speak"] {
    font-size: 1.35rem;     /* visual bump */
    padding: 8px;           /* larger tap target */
    min-width: 44px;        /* accessibility target */
    min-height: 44px;
    border-radius: 10px;
  }
}

/* === end ttsMobilePolishR1 === */

.post-card .meta span,
.post-card .meta time {
  font-weight: 400;           /* normal for date */
  color: #666;
}

.post-card .byline strong {
  font-weight: 700;
  color: #000;
}

/* spacing fix: ensure excerpt doesn't stick to byline */
.post-card .excerpt {
  margin-top: 8px;
}

/* summary card polish for consistency */
.post-card {
  background: #fff;
  border-radius: 10px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.1);
  padding: 16px;
  transition: transform 0.2s ease;
}

.post-card:hover {
  transform: translateY(-3px);
}
/* ======================================================== */
/* ==== videoPlaceholderCleanR2 ==== */
.okobs-video {
  background: #000;
  margin: 0 auto 20px;
  max-width: 960px;
  border-radius: 12px;
  overflow: hidden;
}
.okobs-video.pending {
  display: flex;
  align-items: center;
  justify-content: center;
}
.okobs-video img[alt="Play video"] {
  display: block;
}
.play-overlay {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 80px;
  height: 80px;
  border-radius: 50%;
  background: rgba(0,0,0,0.6);
  display: flex;
  align-items: center;
  justify-content: center;
}
.play-overlay .triangle {
  width: 0;
  height: 0;
  border-left: 24px solid #fff;
  border-top: 14px solid transparent;
  border-bottom: 14px solid transparent;
  margin-left: 4px;
}
figure.wp-block-embed:empty,
.wp-block-embed__wrapper:empty,
div.fb-video:empty {
  display: none !important;
}
/* ===================================================== */
/* ==== headerLock-2025-11-07SR1 ==== */
.site-header {
  position: sticky;
  top: 0;
  z-index: 1000;
  width: 100%;
  background: #1E90FF;
  padding: 10px 0 6px 0;
  box-shadow: 0 2px 5px rgba(0,0,0,0.15);
  text-align: center;
}

.header-inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}

.logo-block {
  display: flex;
  flex-direction: column;
  align-items: center;
}

.header-logo {
  height: 80px;
  width: auto;
  display: block;
  margin: 0 auto;
}

.motto {
  color: white;
  font-size: 1rem;
  font-weight: 500;
  text-align: center;
  margin-top: 4px;
}

.menu-toggle {
  position: absolute;
  top: 14px;
  right: 16px;
  background: transparent;
  border: none;
  color: white;
  font-size: 28px;
  cursor: pointer;
}

.main-nav {
  display: none;
}

.main-nav a {
  color: white;
  text-decoration: none;
  font-weight: 500;
  margin: 0 10px;
}
/* ==== end headerLock-2025-11-07SR1 ==== */
/* ==== post-gap-fix 2025-11-07 ====
   Tighten space between hero image and first video/embed */
.post-detail .post-hero { margin: 0 auto 16px auto; }
.post-detail .post-body > * { margin-top: 16px; margin-bottom: 16px; }
.post-detail .post-body > :first-child { margin-top: 0; }

/* If the first meaningful block is a video/embed, reduce its top margin */
.post-detail .post-body > .okobs-video:first-child,
.post-detail .post-body > figure.wp-block-embed:first-child,
.post-detail .post-body > .wp-block-embed__wrapper:first-child,
.post-detail .post-body > iframe:first-child,
.post-detail .post-body > video:first-child { margin-top: 0 !important; }

/* Hide empty paragraphs / spacers that create white gaps */
.post-detail .post-body p:empty,
.post-detail .post-body p:has(br:only-child),
.post-detail .post-body p:has(img:empty) {
  display: none !important;
}

/* Ensure our video wrapper doesn’t add extra gap */
.okobs-video { margin: 0 auto 16px auto; }
/* 🟢 override.css insert (post-gap-fix 2025-11-07SR1) — START
   Tighten space between hero image and first video/embed; hide spacer paragraphs */
.post-detail .post-hero { margin: 0 auto 16px auto; }
.post-detail .post-body > * { margin-top: 16px; margin-bottom: 16px; }
.post-detail .post-body > :first-child { margin-top: 0; }

.post-detail .post-body > .okobs-video:first-child,
.post-detail .post-body > figure.wp-block-embed:first-child,
.post-detail .post-body > .wp-block-embed__wrapper:first-child,
.post-detail .post-body > iframe:first-child,
.post-detail .post-body > video:first-child { margin-top: 0 !important; }

.post-detail .post-body p:empty,
.post-detail .post-body p:has(br:only-child),
.post-detail .post-body p:has(img:empty) { display: none !important; }

.okobs-video { margin: 0 auto 16px auto; }
/* 🔴 override.css insert (post-gap-fix 2025-11-07SR1) — END */
/* 🟢 force-embeds-visible 2025-11-07SR1 */
.post-body iframe,
.post-body video,
.post-body .fb-video,
.post-body .fb-post {
  display: block !important;
  visibility: visible !important;
  max-width: 100%;
  width: 100%;
  min-height: 320px; /* ensures you see it even before FB/Vimeo resizes */
  margin: 0 auto 16px auto;
}

/* guard against themes that hide WP embed wrappers */
.post-body figure.wp-block-embed,
.post-body .wp-block-embed__wrapper {
  display: block !important;
  margin: 0 auto 16px auto;
}
/* 🟢 force-embeds-visible 2025-11-07SR1-R11 */
.post-body iframe,
.post-body video,
.post-body .fb-video,
.post-body .fb-post {
  display:block !important;
  visibility:visible !important;
  max-width:100%;
  width:100%;
  min-height:320px;  /* safety floor */
  margin:0 auto 16px;
}

/* WordPress wrappers */
.post-body figure.wp-block-embed,
.post-body .wp-block-embed__wrapper{
  display:block !important;
  margin:0 auto 16px;
}
/* 🟢 2025-11-07SR1-videoFixR12-forceVisibleWrapper */
.post-body iframe,
.post-body video,
.post-body .wp-block-embed__wrapper iframe,
.post-body figure.wp-block-embed iframe,
.post-body figure iframe,
.post-body div iframe {
  display: block !important;
  visibility: visible !important;
  max-width: 100% !important;
  width: 100% !important;
  min-height: 360px !important;
  height: auto !important;
  margin: 0 auto 16px !important;
}

.post-body figure.wp-block-embed,
.post-body .wp-block-embed__wrapper,
.post-body .wp-block-embed-vimeo,
.post-body .wp-block-embed-facebook,
.post-body .wp-block-embed-youtube,
.post-body .wp-block-embed-twitter,
.post-body div[data-oembed-url],
.post-body div.wp-block-embed {
  display: block !important;
  visibility: visible !important;
  overflow: visible !important;
  max-width: 100% !important;
  width: 100% !important;
  min-height: 360px !important;
  margin: 0 auto 16px !important;
}
/* --- OkObserver video hard-visibility floor (2025-11-07R1) --- */
.post-body iframe,
.post-body video,
.post-body .fb-video,
.post-body .fb-post {
  display: block !important;
  visibility: visible !important;
  width: 100% !important;
  max-width: 100% !important;
  border: 0 !important;
}

/* Guarantee usable height for Vimeo/YT/Facebook players */
.post-body iframe[src*="player.vimeo.com"],
.post-body iframe[src*="youtube.com"],
.post-body iframe[src*="youtu.be"],
.post-body iframe[src*="facebook.com/plugins/video"] {
  min-height: 56.25vw !important;   /* 16:9 by viewport width */
  background: #000 !important;
}
@media (min-width: 900px) {
  .post-body iframe[src*="player.vimeo.com"],
  .post-body iframe[src*="youtube.com"],
  .post-body iframe[src*="youtu.be"],
  .post-body iframe[src*="facebook.com/plugins/video"] {
    min-height: 480px !important;   /* desktop floor */
  }
}

/* Kill phantom whitespace made by empty <p> or <br>-only paragraphs
   – apply to both summary cards (.post-body) and full post detail (.post-detail-content) */
.post-body p:empty,
.post-detail-content p:empty,
.post-body p:has(> br:only-child),
.post-detail-content p:has(> br:only-child) {
  display: none !important;
}

/* If an iframe lives inside a paragraph, keep sane spacing */
.post-body p:has(> iframe),
.post-detail-content p:has(> iframe) {
  margin: 0 0 16px !important;
}

/* Safety: any oEmbed wrappers with no content shouldn’t take space */
.post-body .wp-block-embed__wrapper:empty,
.post-detail-content .wp-block-embed__wrapper:empty,
.post-body figure.wp-block-embed:empty,
.post-detail-content figure.wp-block-embed:empty {
  display: none !important;
}
/* --- OkObserver Grid Enforcer: 4/3/1 columns (desktop/tablet/mobile) --- */
#app .posts-grid{
  display:grid !important;
  grid-template-columns: repeat(4, minmax(0,1fr)) !important;
  gap: 18px !important;
  align-content:start !important;
}
#app .post-card{ min-width:0 !important; }

/* Tablet (<= 1200px) = 3 columns */
@media (max-width: 1200px){
  #app .posts-grid{
    grid-template-columns: repeat(3, minmax(0,1fr)) !important;
  }
}

/* Mobile (<= 720px) = 1 column */
@media (max-width: 720px){
  #app .posts-grid{
    grid-template-columns: 1fr !important;
    gap: 14px !important;
  }
}

/* Safety: prevent any rogue width rules from forcing single column */
#app .posts-grid, 
#app .post-card,
#app .post-card * {
  box-sizing: border-box;
}
/* --- HARD ENFORCER: 4/3/1 columns regardless of previous rules --- */
#app .posts-grid {
  display: grid !important;
  grid-auto-flow: row !important;
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  gap: 18px !important;
}

/* Kill rogue layout overrides that collapse to one column */
#app .posts-grid > * {
  width: auto !important;
  max-width: none !important;
  flex: 0 0 auto !important;
  float: none !important;
  clear: none !important;
  display: block !important; /* cards stay as block children inside grid */
}

/* Some themes inject `.row`/`.col-*` semantics; neutralize them */
#app .posts-grid [class*="col-"],
#app .posts-grid .row {
  width: auto !important;
  max-width: none !important;
  float: none !important;
  display: block !important;
}

/* Tablet (<=1200px) */
@media (max-width:1200px){
  #app .posts-grid { grid-template-columns: repeat(3, minmax(0,1fr)) !important; }
}

/* Mobile (<=720px) */
@media (max-width:720px){
  #app .posts-grid { grid-template-columns: 1fr !important; gap: 14px !important; }
}

/* Safety: cards can’t set their own 100% width */
#app .post-card { width: auto !important; min-width: 0 !important; }
/* ───────────────────────────────────────────────────────────────────
   OkObserver Grid Hard-Enforcer • 2025-11-08 • gridFix1
   Purpose: Restore 4/3/1 columns on home cards even if wrapper classes change.
   This is append-only and won't interfere with existing rules because it:
   - Targets likely containers explicitly, with !important for reliability.
   - Resets child card inline styles that can force 1-column.
   - Leaves mobile/tablet behavior intact via media queries.
   Remove if you later standardize on one wrapper class (e.g., .posts-grid).
   ─────────────────────────────────────────────────────────────────── */

#app .posts-grid,
#app .post-list,
#app .posts,
#app .cards,
#app main .list,
#app main .grid,
#app main .items {
  display: grid !important;
  grid-auto-flow: row !important;
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  gap: 18px !important;
}

/* Ensure children don't clamp width or float */
#app .posts-grid > *,
#app .post-list > *,
#app .posts > *,
#app .cards > *,
#app main .list > *,
#app main .grid > *,
#app main .items > * {
  width: auto !important;
  max-width: none !important;
  flex: 0 0 auto !important;
  float: none !important;
  display: block !important;
}

/* Tablet */
@media (max-width: 1200px) {
  #app .posts-grid,
  #app .post-list,
  #app .posts,
  #app .cards,
  #app main .list,
  #app main .grid,
  #app main .items {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  }
}

/* Mobile */
@media (max-width: 720px) {
  #app .posts-grid,
  #app .post-list,
  #app .posts,
  #app .cards,
  #app main .list,
  #app main .grid,
  #app main .items {
    grid-template-columns: 1fr !important;
    gap: 14px !important;
  }
}

/* Card safety: don't let a card force full width */
#app .post-card,
#app article {
  width: auto !important;
  min-width: 0 !important;
}
/* --- Grid Hard Lock (11/08) --------------------------------------- */
/* Prefer class hook if present */
.posts-grid,
.posts-list,
#posts,
.cards-wrap {
  display: grid !important;
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  gap: 22px !important;
}

/* Robust fallback: any container that *directly* holds .post-card items */
div:has(> .post-card):not(.post-detail) {
  display: grid !important;
  grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
  gap: 22px !important;
}

/* Card should not fight the grid */
.post-card { width: 100% !important; }

/* Responsive steps */
@media (max-width: 1100px) {
  .posts-grid,
  .posts-list,
  #posts,
  .cards-wrap,
  div:has(> .post-card):not(.post-detail) {
    grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
  }
}
@media (max-width: 720px) {
  .posts-grid,
  .posts-list,
  #posts,
  .cards-wrap,
  div:has(> .post-card):not(.post-detail) {
    grid-template-columns: 1fr !important;
  }
}
/* 🟢 override.css — APPEND ONLY (OkObserver Build 2025-11-10R1-embedFix)
   Ensures any embeds inside post bodies are visible and sized sanely. */

.post-body iframe,
.post-body .wp-block-embed__wrapper iframe,
.post-body .wp-block-embed iframe,
.post-body .fb-video iframe,
.post-body .fb_iframe_widget iframe {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  min-height: 420px !important;
  border: 0 !important;
}

.post-body video {
  display: block;
  width: 100%;
  max-width: 100%;
  height: auto;
}

.post-body [data-oembed-url],
.post-body .wp-block-embed,
.post-body .wp-block-embed__wrapper {
  display: block !important;
  min-height: 420px;
}

/* Kill any accidental black placeholder backgrounds */
.post-body iframe,
.post-body .wp-block-embed,
.post-body [data-oembed-url] {
  background: transparent !important;
}

/* 🔴 override.css — end of appended block */
/* 🟢 override.css addendum 2025-11-10R2 video+grid */
.posts-grid { align-items:start; }
.post-card { background:#fff; border-radius:12px; box-shadow:0 2px 10px rgba(0,0,0,.08); overflow:hidden; }
.post-card .card-media img { width:100%; height:auto; display:block; }
.post-title a { color:#1166ff; text-decoration:none; }
.post-hero { margin: 16px 0; }
.post-hero-img { width:100%; height:auto; display:block; }
.post-body iframe { display:block; width:100%; max-width:100%; min-height:420px; border:0; }
.ok-header { position:sticky; top:0; background:#1E90FF; color:#fff; z-index:10; }
.ok-header-inner { max-width:1100px; margin:0 auto; padding:12px 16px; text-align:center; position:relative; }
.ok-logo { height:64px; display:block; margin:0 auto 6px; }
.ok-motto { font-weight:600; }
.ok-hamburger { position:absolute; right:8px; top:8px; font-size:22px; background:transparent; color:#fff; border:0; }
.ok-nav { text-align:center; padding:6px 0; }
.ok-nav a { color:#fff; margin:0 8px; text-decoration:none; font-weight:600; }
.ok-footer { padding:24px; text-align:center; color:#666; }
/* 🟢 override.css — append (2025-11-10R4) Detail ordering + button + embed guards */

/* Layout order is handled in JS; these styles enforce look/feel */
.post-detail { max-width: 980px; margin: 24px auto 64px; padding: 0 16px; }
.post-hero { margin: 0 0 16px; }
.post-hero-img { width: 100%; height: auto; display: block; object-fit: contain; }

.post-title { margin: 8px 0 6px; line-height: 1.2; }
.post-byline { margin: 0 0 18px; color: #516173; }

.post-body iframe,
.post-body .wp-block-embed__wrapper iframe,
.post-body .wp-block-embed iframe,
.post-body .fb-video iframe,
.post-body .fb-post iframe {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  min-height: 420px !important;
  border: 0 !important;
  visibility: visible !important;
  opacity: 1 !important;
  background: transparent !important;
}

/* Back to Posts: real button, bottom-left */
.post-nav { margin-top: 28px; }
.back-to-posts {
  appearance: none;
  display: inline-block;
  padding: 10px 14px;
  border-radius: 8px;
  border: 0;
  background: #1E90FF;
  color: #fff;
  font-weight: 600;
  cursor: pointer;
}
.back-to-posts:hover { filter: brightness(0.95); }
/* 🟢 override.css add 2025-11-10R5 */
.okobs-dev-banner { font-family: system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif; }
.post-body iframe { display:block !important; width:100% !important; max-width:100% !important; min-height:420px !important; border:0 !important; visibility:visible !important; opacity:1 !important; }
/* 2025-11-10R6 detail/button/embed guards */
.post-detail { max-width: 980px; margin: 24px auto 64px; padding: 0 16px; }
.post-hero { margin: 0 0 16px; }
.post-hero-img { width:100%; height:auto; display:block; object-fit:contain; }
.post-title { margin: 8px 0 6px; line-height: 1.2; }
.post-byline { margin: 0 0 18px; color: #516173; }

/* Real button */
.post-nav { margin-top: 28px; }
.back-to-posts{
  appearance:none; display:inline-block; padding:10px 14px;
  border-radius:8px; border:0; background:#1E90FF; color:#fff;
  font-weight:600; cursor:pointer;
}
.back-to-posts:hover{ filter:brightness(0.95); }

/* Make any embeds visible and sized sanely */
.post-body iframe,
.post-body .wp-block-embed__wrapper iframe,
.post-body .wp-block-embed iframe,
.post-body .fb-video iframe,
.post-body .fb-post iframe {
  display:block !important; visibility:visible !important; opacity:1 !important;
  width:100% !important; max-width:100% !important; min-height:420px !important; border:0 !important;
}

/* --------------------------------------------
 * OkObserver — Hamburger animation (append-only)
 * Safe: no existing selectors overridden
 * Requires a wrapper to toggle .is-menu-open on <body> or #app
 * -------------------------------------------- */

/* Subtle fade+slide for dropdown */
@keyframes oo-slide-fade-in {
  0% { opacity: 0; transform: translateY(-6px); }
  100% { opacity: 1; transform: translateY(0); }
}
@keyframes oo-slide-fade-out {
  0% { opacity: 1; transform: translateY(0); }
  100% { opacity: 0; transform: translateY(-6px); }
}

/* Menu panel (closed by default) */
.oo-menu {
  will-change: opacity, transform;
  transition: opacity 120ms ease, transform 120ms ease;
  pointer-events: none;
  opacity: 0;
  transform: translateY(-6px);
}

/* Open state */
.is-menu-open .oo-menu {
  pointer-events: auto;
  opacity: 1;
  transform: translateY(0);
  animation: oo-slide-fade-in 120ms ease;
}

/* Optional overlay to capture outside clicks (invisible) */
.oo-overlay {
  position: fixed;
  inset: 0;
  display: none;
}
.is-menu-open .oo-overlay {
  display: block;
}

/* Reduce tap-jank on the hamburger button 2*/
.oo-hamburger {
  -webkit-tap-highlight-color: transparent;
  cursor: pointer;
}
.oo-hamburger:active {
  opacity: 0.85;
}
/* 🔴 override.css — END FULL FILE */
/* 🟢 Full file: override.css v2025-11-07SR1 + append-only: hamburger animation hooks */
/* (All your existing rules retained; new block appended at the end.) */

/* … your existing override.css content remains here unchanged … */

/* --------------------------------------------
 * OkObserver — Hamburger animation (append-only)
 * Safe: no existing selectors overridden
 * Requires a wrapper to toggle .is-menu-open on <body> or #app
 * -------------------------------------------- */

/* Subtle fade+slide for dropdown */
@keyframes oo-slide-fade-in {
  0% { opacity: 0; transform: translateY(-6px); }
  100% { opacity: 1; transform: translateY(0); }
}
@keyframes oo-slide-fade-out {
  0% { opacity: 1; transform: translateY(0); }
  100% { opacity: 0; transform: translateY(-6px); }
}

/* Menu panel (closed by default) */
.oo-menu {
  will-change: opacity, transform;
  transition: opacity 120ms ease, transform 120ms ease;
  pointer-events: none;
  opacity: 0;
  transform: translateY(-6px);
}

/* Open state */
.is-menu-open .oo-menu {
  pointer-events: auto;
  opacity: 1;
  transform: translateY(0);
  animation: oo-slide-fade-in 120ms ease;
}

/* Optional overlay to capture outside clicks (invisible) */
.oo-overlay {
  position: fixed;
  inset: 0;
  display: none;
}
.is-menu-open .oo-overlay {
  display: block;
}

/* Reduce tap-jank on the hamburger button 1*/ 
.oo-hamburger {
  -webkit-tap-highlight-color: transparent;
  cursor: pointer;
}
.oo-hamburger:active {
  opacity: 0.85;
}
/* 🔴 override.css — END FULL FILE */
/* 🟢 post detail byline */
.post-detail .detail-byline {
  font-weight: 600;      /* bold */
  margin: 0.25rem 0 1rem;
  color: #222;           /* keep readable against white background */
}
/* 🔴 post detail byline */
/* 🟢 hamburger dropdown basics */
.oo-menu {
  position: absolute;
  right: 16px;
  top: 56px;
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 12px 24px rgba(0,0,0,.14);
  padding: 8px;
  min-width: 160px;
  z-index: 1100;
}
.oo-menu a {
  display:block; padding:10px 12px; border-radius:8px; color:#111; text-decoration:none;
}
.oo-menu a:hover { background:#f2f4f7; }
/* optional page-dimming overlay */
.oo-overlay {
  position: fixed; inset: 0; background: rgba(0,0,0,.25); z-index: 1000;
}
/* 🔴 hamburger dropdown basics */
/* 🟢 detail spacing tighten */
.post-detail .hero { display:block; max-width:100%; height:auto; margin:12px auto 16px; }
.post-detail .video-embed { margin:12px 0 20px; }

/* remove phantom gaps from empty nodes */
.post-detail .post-body p:empty,
.post-detail .post-body div:empty,
.post-detail .post-body figure:empty { display:none; }

/* avoid extra top gap on first element */
.post-detail > *:first-child { margin-top: 0; }
/* 🔴 detail spacing tighten */
/* 🟢 detail gap fixes */
.post-detail .hero { display:block; max-width:100%; height:auto; margin:12px auto 16px; }
.post-detail .video-embed { margin:12px 0 20px; }

/* collapse phantom blocks that render no content */
.post-detail .post-body p:empty,
.post-detail .post-body div:empty,
.post-detail .post-body figure:empty { display:none; }

/* Gutenberg embed wrappers sometimes linger with no iframe */
.post-detail .post-body figure.wp-block-embed:has(iframe) { display:block; }
.post-detail .post-body figure.wp-block-embed:not(:has(iframe)) { display:none; }

/* ensure top of article starts tight */
.post-detail .post-body > *:first-child { margin-top:0 !important; }
/* 🔴 detail gap fixes */
/* 🟢 gap killer for stray Gutenberg wrappers */
.post-detail .post-body figure.wp-block-embed:not(:has(iframe)),
.post-detail .post-body .wp-embed-aspect:not(:has(iframe)),
.post-detail .post-body .wp-block-video:not(:has(video)) { display:none; }

/* extra guard: any ratio box without media */
.post-detail .post-body > *[style*="padding-top"]:not(:has(iframe,video)) { display:none; }
/* 🔴 gap killer */
/* gap guards for any truly empty remnants near the top of the article */
.post-detail .post-body p:empty,
.post-detail > p:empty { display: none; }

/* Ensure byline is bold (requested) */
.detail-byline { font-weight: 700; }
/* 🟢 override.css — start of full file */
/* OkObserver Styles — Build 2025-11-12H3
   - Sticky blue header with centered branding + motto
   - Always-hamburger overlay menu
   - 4/3/1 responsive grid
   - White cards, soft shadow, rounded corners
   - Immediate excerpts
   - Post detail: HERO → TITLE → BYLINE → CONTENT → Back button
   - White-gap fix above first embeds/iframes
*/

/* Base */
:root{
  --oo-blue:#1E90FF;
  --oo-bg:#f5f6f7;
  --oo-card:#fff;
  --oo-text:#111;
  --oo-muted:#667085;
  --oo-shadow:0 6px 18px rgba(0,0,0,.10);
  --oo-radius:14px;
  --oo-gutter:16px;
}
*{box-sizing:border-box}
a{color:#0b63ce;text-decoration:none}
a:hover{text-decoration:underline}

/* Header */
.oo-header{
  position:sticky; top:0; z-index:50;
  background:var(--oo-blue); color:#fff;
  box-shadow:0 2px 10px rgba(0,0,0,.15);
}
.oo-header-inner{
  display:grid; grid-template-columns:48px 1fr 48px; align-items:center;
  max-width:1200px; margin:0 auto; padding:10px 16px;
}
.oo-hamburger{
  justify-self:start; width:42px; height:42px; border:0; border-radius:12px;
  background:rgba(255,255,255,.15); color:#fff; font-size:22px; cursor:pointer;
}
.oo-brand{justify-self:center; display:flex; flex-direction:column; align-items:center; gap:4px; color:#fff}
.oo-logo{height:34px; width:auto; display:block; filter:drop-shadow(0 2px 2px rgba(0,0,0,.25))}
.oo-motto{font-size:12px; line-height:1.2; opacity:.95; text-align:center;}

/* Overlay Menu */
.oo-overlay{
  position:fixed; inset:0; background:rgba(0,0,0,.5);
  z-index:40;
}
.oo-menu{
  position:fixed; inset:0 0 auto 0; top:56px; background:#fff; z-index:41;
  max-height:60vh; overflow:auto; border-radius:0 0 16px 16px; box-shadow:var(--oo-shadow);
  padding:12px 16px;
}
.oo-menu ul{list-style:none; padding:0; margin:0}
.oo-menu li{padding:12px 4px; border-bottom:1px solid #eee}
.oo-menu a{color:var(--oo-text); font-weight:600}

/* Grid */
.posts-grid{
  max-width:1200px; margin:18px auto; padding:0 var(--oo-gutter);
  display:grid; gap:var(--oo-gutter);
  grid-template-columns:repeat(4, 1fr);
}
@media (max-width: 1100px){
  .posts-grid{ grid-template-columns:repeat(3, 1fr); }
}
@media (max-width: 700px){
  .posts-grid{ grid-template-columns:1fr; }
}

/* Cards */
.post-card{
  background:var(--oo-card); border-radius:var(--oo-radius);
  box-shadow:var(--oo-shadow); overflow:hidden;
  display:flex; flex-direction:column;
}
.post-card .thumb{
  width:100%; height:220px; object-fit:cover; display:block; border:0;
}
.post-card .pad{ padding:14px 14px 16px; }
.post-card h3{ margin:8px 0 6px; font-size:1.05rem; line-height:1.25; }
.post-card .byline{ color:var(--oo-muted); font-size:.9rem; margin-bottom:8px; }
.post-card .excerpt :where(p){ margin:.5em 0; }
.post-card .excerpt :where(p:first-child){ margin-top:0; }

/* Detail */
.post-detail{
  max-width:860px; margin:20px auto 64px; padding:0 var(--oo-gutter);
  background:transparent;
}
.post-detail .hero{
  width:100%; height:auto; display:block; object-fit:contain; /* fully contained (no crop) */
  border-radius:var(--oo-radius); box-shadow:var(--oo-shadow);
  background:#fff;
}
.detail-title{ margin:16px 0 6px; }
.detail-byline{ color:#333; font-weight:700; margin:0 0 14px; }

/* White gap fix above first embeds/iframes in content */
.post-body > :first-child{ margin-top:0 !important; }
.post-body > .wp-block-embed:first-child,
.post-body > .wp-block-embed__wrapper:first-child,
.post-body > .wp-embed-aspect-16-9:first-child,
.post-body > p:has(> a[href*="vimeo.com"]), 
.post-body > p:has(> a[href*="youtube.com/watch"]),
.post-body > p:has(> a[href*="youtu.be/"]) {
  margin-top:0 !important;
}
.post-body iframe, .post-body video{
  display:block; width:100%; max-width:100%; border:0;
  margin:12px 0 20px; min-height:360px;
  border-radius:12px; box-shadow:var(--oo-shadow);
}

/* Back button */
.btn-back{
  display:inline-block; padding:10px 14px; border-radius:12px;
  background:var(--oo-blue); color:#fff; font-weight:700; text-decoration:none;
}

/* Footer */
.oo-footer{
  color:#444; font-size:.9rem; text-align:center; padding:28px 12px 36px;
}

/* 🛡️ Little helpers */
.is-menu-open body{ overflow:hidden; }
.no-select{ user-select:none; }

/* 🔴 override.css — end of full file */
/* 🟢 override.css — start of full file */
/* OkObserver Styles — Build 2025-11-12H4 */

:root{
  --oo-blue:#1E90FF;
  --oo-bg:#f5f6f7;
  --oo-card:#fff;
  --oo-text:#111;
  --oo-muted:#667085;
  --oo-shadow:0 6px 18px rgba(0,0,0,.10);
  --oo-radius:14px;
  --oo-gutter:16px;
}
*{box-sizing:border-box}
a{color:#0b63ce;text-decoration:none}
a:hover{text-decoration:underline}

/* Header */
.oo-header{ position:sticky; top:0; z-index:50; background:var(--oo-blue); color:#fff; box-shadow:0 2px 10px rgba(0,0,0,.15); }
.oo-header-inner{ display:grid; grid-template-columns:48px 1fr 48px; align-items:center; max-width:1200px; margin:0 auto; padding:10px 16px; }
.oo-hamburger{ justify-self:start; width:42px; height:42px; border:0; border-radius:12px; background:rgba(255,255,255,.15); color:#fff; font-size:22px; cursor:pointer; }
.oo-brand{justify-self:center; display:flex; flex-direction:column; align-items:center; gap:4px; color:#fff}
.oo-logo{height:34px; width:auto; display:block; filter:drop-shadow(0 2px 2px rgba(0,0,0,.25))}
.oo-motto{font-size:12px; line-height:1.2; opacity:.95; text-align:center;}

/* Overlay Menu */
.oo-overlay{ position:fixed; inset:0; background:rgba(0,0,0,.5); z-index:40; }
.oo-menu{ position:fixed; inset:0 0 auto 0; top:56px; background:#fff; z-index:41; max-height:60vh; overflow:auto; border-radius:0 0 16px 16px; box-shadow:var(--oo-shadow); padding:12px 16px; }
.oo-menu ul{list-style:none; padding:0; margin:0}
.oo-menu li{padding:12px 4px; border-bottom:1px solid #eee}
.oo-menu a{color:var(--oo-text); font-weight:600}

/* Grid */
.posts-grid{
  max-width:1200px; margin:18px auto; padding:0 var(--oo-gutter);
  display:grid; gap:var(--oo-gutter);
  grid-template-columns:repeat(4, 1fr);
}
@media (max-width:1100px){ .posts-grid{ grid-template-columns:repeat(3,1fr); } }
@media (max-width:700px){ .posts-grid{ grid-template-columns:1fr; } }

/* Cards */
.post-card{ background:var(--oo-card); border-radius:var(--oo-radius); box-shadow:var(--oo-shadow); overflow:hidden; display:flex; flex-direction:column; }
.post-card .thumb{ width:100%; height:220px; object-fit:cover; display:block; border:0; }
.post-card .pad{ padding:14px 14px 16px; }
.post-card h3{ margin:8px 0 6px; font-size:1.05rem; line-height:1.25; }
.post-card .byline{ color:var(--oo-muted); font-size:.9rem; margin-bottom:8px; }
.post-card .excerpt :where(p){ margin:.5em 0; }
.post-card .excerpt :where(p:first-child){ margin-top:0; }

/* Detail */
.post-detail{ max-width:860px; margin:20px auto 64px; padding:0 var(--oo-gutter); background:transparent; }
.post-detail .hero{ width:100%; height:auto; display:block; object-fit:contain; border-radius:var(--oo-radius); box-shadow:var(--oo-shadow); background:#fff; }
.detail-title{ margin:16px 0 6px; }
.detail-byline{ color:#333; font-weight:700; margin:0 0 14px; }

/* Embeds — tidy top margins and hide empty containers */
.post-body > :first-child{ margin-top:0 !important; }
.post-body iframe, .post-body video{
  display:block; width:100%; max-width:100%; border:0; margin:12px 0 20px;
  min-height:360px; border-radius:12px; box-shadow:var(--oo-shadow);
}
/* Hide any .video-embed that has no iframe (prevents blank rounded rectangle) */
.post-body .video-embed:not(:has(iframe)){ display:none !important; }

/* Back button */
.btn-back{ display:inline-block; padding:10px 14px; border-radius:12px; background:var(--oo-blue); color:#fff; font-weight:700; text-decoration:none; }

/* Footer */
.oo-footer{ color:#444; font-size:.9rem; text-align:center; padding:28px 12px 36px; }

/* Helpers */
.is-menu-open body{ overflow:hidden; }
.no-select{ user-select:none; }

/* 🔴 override.css — end of full file */
/* 🟢 override.css — start of full file */
/* OkObserver Styles — Build 2025-11-12H5 */

:root{
  --oo-blue:#1E90FF;
  --oo-bg:#f5f6f7;
  --oo-card:#fff;
  --oo-text:#111;
  --oo-muted:#667085;
  --oo-shadow:0 6px 18px rgba(0,0,0,.10);
  --oo-radius:14px;
  --oo-gutter:16px;
}
*{box-sizing:border-box}
a{color:#0b63ce;text-decoration:none}
a:hover{text-decoration:underline}

/* Header */
.oo-header{ position:sticky; top:0; z-index:50; background:var(--oo-blue); color:#fff; box-shadow:0 2px 10px rgba(0,0,0,.15); }
.oo-header-inner{ display:grid; grid-template-columns:48px 1fr 48px; align-items:center; max-width:1200px; margin:0 auto; padding:10px 16px; }
.oo-hamburger{ justify-self:start; width:42px; height:42px; border:0; border-radius:12px; background:rgba(255,255,255,.15); color:#fff; font-size:22px; cursor:pointer; }
.oo-brand{justify-self:center; display:flex; flex-direction:column; align-items:center; gap:4px; color:#fff}
.oo-logo{height:34px; width:auto; display:block; filter:drop-shadow(0 2px 2px rgba(0,0,0,.25))}
.oo-motto{font-size:12px; line-height:1.2; opacity:.95; text-align:center;}

/* Overlay Menu */
.oo-overlay{ position:fixed; inset:0; background:rgba(0,0,0,.5); z-index:40; }
.oo-menu{ position:fixed; inset:0 0 auto 0; top:56px; background:#fff; z-index:41; max-height:60vh; overflow:auto; border-radius:0 0 16px 16px; box-shadow:var(--oo-shadow); padding:12px 16px; }
.oo-menu ul{list-style:none; padding:0; margin:0}
.oo-menu li{padding:12px 4px; border-bottom:1px solid #eee}
.oo-menu a{color:var(--oo-text); font-weight:600}

/* Grid */
.posts-grid{
  max-width:1200px; margin:18px auto; padding:0 var(--oo-gutter);
  display:grid; gap:var(--oo-gutter);
  grid-template-columns:repeat(4, 1fr);
}
@media (max-width:1100px){ .posts-grid{ grid-template-columns:repeat(3,1fr); } }
@media (max-width:700px){ .posts-grid{ grid-template-columns:1fr; } }

/* Cards */
.post-card{ background:var(--oo-card); border-radius:var(--oo-radius); box-shadow:var(--oo-shadow); overflow:hidden; display:flex; flex-direction:column; }
.post-card .thumb{ width:100%; height:220px; object-fit:cover; display:block; border:0; }
.post-card .pad{ padding:14px 14px 16px; }
.post-card h3{ margin:8px 0 6px; font-size:1.05rem; line-height:1.25; }
.post-card .byline{ color:var(--oo-muted); font-size:.9rem; margin-bottom:8px; }
.post-card .excerpt :where(p){ margin:.5em 0; }
.post-card .excerpt :where(p:first-child){ margin-top:0; }

/* Detail */
.post-detail{ max-width:860px; margin:20px auto 64px; padding:0 var(--oo-gutter); background:transparent; }
.post-detail .hero{ width:100%; height:auto; display:block; object-fit:contain; border-radius:var(--oo-radius); box-shadow:var(--oo-shadow); background:#fff; }
.detail-title{ margin:16px 0 6px; }
.detail-byline{ color:#333; font-weight:700; margin:0 0 14px; }

/* Embeds — tidy top margins and hide empty containers */
.post-body > :first-child{ margin-top:0 !important; }
.post-body iframe, .post-body video{
  display:block; width:100%; max-width:100%; border:0; margin:12px 0 20px;
  min-height:360px; border-radius:12px; box-shadow:var(--oo-shadow);
}
/* Hide any .video-embed that has no iframe (prevents blank rounded rectangle) */
.post-body .video-embed:not(:has(iframe)){ display:none !important; }

/* Inline CTA used when FB embed can’t render */
.fb-cta{
  display:inline-block; margin:10px 0 20px; padding:10px 14px;
  border-radius:12px; background:#f0f4ff; color:#0b63ce; font-weight:700; text-decoration:none;
  box-shadow:var(--oo-shadow);
}

/* Back button */
.btn-back{ display:inline-block; padding:10px 14px; border-radius:12px; background:var(--oo-blue); color:#fff; font-weight:700; text-decoration:none; }

/* Footer */
.oo-footer{ color:#444; font-size:.9rem; text-align:center; padding:28px 12px 36px; }

/* Helpers */
.is-menu-open body{ overflow:hidden; }
.no-select{ user-select:none; }

/* 🔴 override.css — end of full file */
/* Header layout: centered brand, hamburger pinned right */
.oo-header { position: sticky; top: 0; z-index: 1000; background:#1E90FF; }
.oo-header-inner{
  position: relative;
  max-width: 1200px;
  margin: 0 auto;
  padding: 12px 16px;
  display: flex;
  align-items: center;
  justify-content: center; /* keeps logo+motto centered */
}
/* Hamburger on the RIGHT */
.oo-hamburger{
  position: absolute;
  right: 16px;      /* 👈 pin to right */
  left: auto;       /* ensure not pinned left */
  top: 50%;
  transform: translateY(-50%);
  font-size: 22px;
  line-height: 1;
  background: transparent;
  border: 0;
  color: #fff;
  cursor: pointer;
}
.excerpt a { color: #1E90FF; text-decoration: underline; pointer-events: auto; }
/* Back to Posts — force OkObserver blue #1E90FF */
.post-detail .back-row { margin-top: 24px; }
.post-detail .back-row .back {
  display: inline-block;
  background: #1E90FF;
  color: #fff !important;
  padding: 10px 16px;
  border-radius: 8px;
  text-decoration: none !important;
  font-weight: 600;
  border: 0;
  box-shadow: 0 2px 10px rgba(0,0,0,0.08);
}
.post-detail .back-row .back:hover,
.post-detail .back-row .back:focus {
  filter: brightness(0.95);
  text-decoration: none !important;
}
/* 🟢 override.css — start of insert (Hamburger flyout size/position) */
/* Compact flyout panel on desktop */
.oo-menu {
  position: fixed;
  top: 72px;                 /* ~header height; adjust if your header differs */
  right: 16px;
  width: 320px;
  max-height: calc(100vh - 96px);
  overflow: auto;
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 12px 28px rgba(0,0,0,.18);
  padding: 12px 0;
  z-index: 1000;
  display: none;             /* hidden by default; opened by .is-menu-open */
}

/* Show when toggled */
.is-menu-open .oo-menu { display: block; }

/* Optional dim overlay (if present in DOM) */
.oo-overlay {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.25);
  backdrop-filter: blur(1px);
  z-index: 999;
  display: none;
}
.is-menu-open .oo-overlay { display: block; }

/* Menu item styling */
.oo-menu a {
  display: block;
  padding: 14px 18px;
  color: #111;
  text-decoration: none;
}
.oo-menu a:hover { background: #f5f7fb; }

/* Keep the old full-width drawer behavior only on small screens */
@media (max-width: 899px) {
  .oo-menu {
    top: 64px;
    right: 0;
    left: 0;
    width: auto;
    border-radius: 0 0 12px 12px;
  }
}
/* 🔴 override.css — end of insert */
/* --- OkObserver 2025-11-12H2 : header/menu fixes --- */

/* Make the hamburger always tappable (44x44) and above other layers */
[data-oo="hamburger"], .oo-hamburger {
  position: relative;
  z-index: 1003;
  width: 44px;
  height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
}

/* Give the hamburger breathing room from the logo */
header [data-oo="hamburger"], .site-header [data-oo="hamburger"], .oo-header [data-oo="hamburger"] {
  margin-left: auto;          /* pushes it to the right when header uses flex */
  margin-right: 12px;
}
@media (max-width: 899px) {
  header [data-oo="hamburger"], .site-header [data-oo="hamburger"], .oo-header [data-oo="hamburger"] {
    margin-right: 16px;       /* a bit more space on phones */
  }
}

/* Motto: never underline (even if it's wrapped in an <a>) */
.site-motto, .site-motto a, .site-motto * {
  text-decoration: none !important;
  border: 0 !important;
}

/* Ensure the header stays on top; the menu and overlay stack cleanly */
.site-header, header, .oo-header {
  position: sticky; top: 0; z-index: 1002;
}

/* Hamburger flyout – compact on desktop, full-width drawer on mobile */
.oo-menu, [data-oo="menu"] {
  position: fixed;
  top: 72px;                  /* ≈ header height; adjust if your header is taller/shorter */
  right: 16px;
  width: 320px;
  max-height: calc(100vh - 96px);
  overflow: auto;
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 12px 28px rgba(0,0,0,.18);
  padding: 12px 0;
  z-index: 1001;
  display: none;
}
.is-menu-open .oo-menu,
.is-menu-open [data-oo="menu"] { display: block; }

/* Optional dimmer overlay if present */
.oo-overlay, [data-oo="overlay"] {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.25);
  backdrop-filter: blur(1px);
  z-index: 1000;
  display: none;
}
.is-menu-open .oo-overlay,
.is-menu-open [data-oo="overlay"] { display: block; }

/* Keep mobile as a full-width drawer */
@media (max-width: 899px) {
  .oo-menu, [data-oo="menu"] {
    top: 64px;
    right: 0; left: 0;
    width: auto;
    border-radius: 0 0 12px 12px;
  }
}

/* Menu link styling */
.oo-menu a, [data-oo="menu"] a {
  display: block;
  padding: 14px 18px;
  color: #111;
  text-decoration: none;
}
.oo-menu a:hover, [data-oo="menu"] a:hover { background: #f5f7fb; }
/* === OkObserver — header micro-tweak (append-only) =================== */
/* 1) Add safe spacing between logo block and hamburger on all sizes    */
.oo-header .oo-brand{ padding-right:3.25rem !important; } /* room for button */
.oo-header .oo-menu{ right:1rem !important; z-index:1002 !important; }

/* 2) Kill any underline on the motto, even if the brand is a link      */
.oo-header .oo-title .oo-motto,
.oo-header a.brand .oo-motto,
.oo-header .motto {
  text-decoration: none !important;
  border-bottom: 0 !important;
}

/* Keep the dropdown above content and fully tappable */
#oo-nav{ z-index:1001 !important; }
/* === OkObserver header fix: center brand + right-aligned hamburger (append-only) === */

/* Ensure the header can anchor absolutely-positioned controls */
.oo-header, .site-header, header { position: sticky; top: 0; z-index: 1002; }

/* Center the brand block and motto */
.oo-brand, .site-branding, .brand {
  display: block;
  margin: 0 auto;            /* center horizontally */
  text-align: center;        /* center text inside */
}
.oo-title, .site-title, .logo-text { text-align: center; }
.oo-motto, .site-motto, .motto {
  text-align: center;
  text-decoration: none !important;
  border: 0 !important;
}

/* Put hamburger on the RIGHT, with a solid tap target, above other layers */
[data-oo="hamburger"], .oo-hamburger {
  position: absolute;
  right: 12px;
  top: 50%;
  transform: translateY(-50%);
  width: 44px;
  height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  z-index: 1003;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
}

/* Give a touch more space on phones */
@media (max-width: 899px) {
  [data-oo="hamburger"], .oo-hamburger { right: 16px; }
}

/* Keep menu panel position styles you already have; do NOT control visibility here.
   Visibility is handled by the 'hidden' attribute in JS. */
[hidden] { display: none !important; }
/* === OkObserver header stability (append-only, no overrides removed) === */
:root{
  --oo-header-h-desktop: 72px;   /* match your actual header height if different */
  --oo-header-h-mobile:  64px;
}

/* 1) Make header a stable bar that never changes height when menu opens */
.oo-header, .site-header, header{
  position: sticky;
  top: 0;
  z-index: 1002;
  display: flex;
  align-items: center;
  justify-content: center;                 /* center the brand block */
  min-height: var(--oo-header-h-desktop);  /* fixes the desktop "scoot" */
}
@media (max-width: 899px){
  .oo-header, .site-header, header{
    min-height: var(--oo-header-h-mobile); /* fixes mobile shifting */
  }
}

/* 2) Center brand/motto AND reserve space on the right for the hamburger
      so the icon never overlaps the logo on mobile */
.oo-brand, .site-branding, .brand{
  margin: 0 auto;
  text-align: center;
  padding-right: 56px;                      /* 44px button + ~12px gutter */
}
@media (max-width: 899px){
  .oo-brand, .site-branding, .brand{
    padding-right: 60px;                    /* a touch more space on phones */
  }
}
/* Motto should never underline */
.oo-motto, .site-motto, .motto,
.oo-motto a, .site-motto a, .motto a{
  text-decoration: none !important;
  border: 0 !important;
}

/* 3) Pin hamburger to the RIGHT, vertically centered, large tap target */
[data-oo="hamburger"], .oo-hamburger{
  position: absolute;
  right: 12px;
  top: calc(var(--oo-header-h-desktop) / 2);
  transform: translateY(-50%);
  width: 44px;
  height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  z-index: 1003;
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
}
@media (max-width: 899px){
  [data-oo="hamburger"], .oo-hamburger{
    right: 16px;
    top: calc(var(--oo-header-h-mobile) / 2);
  }
}

/* 4) Menu panel: position ONLY. Visibility stays controlled by [hidden]. */
.oo-menu, [data-oo="menu"]{
  position: fixed;
  top: var(--oo-header-h-desktop);
  right: 16px;
  width: 320px;
  max-height: calc(100vh - var(--oo-header-h-desktop) - 24px);
  overflow: auto;
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 12px 28px rgba(0,0,0,.18);
  padding: 12px 0;
  z-index: 1001;
}
@media (max-width: 899px){
  .oo-menu, [data-oo="menu"]{
    top: var(--oo-header-h-mobile);
    right: 0; left: 0;
    width: auto;
    border-radius: 0 0 12px 12px;
    max-height: calc(100vh - var(--oo-header-h-mobile));
  }
}

/* 5) Let the hidden attribute be the single source of truth */
[hidden]{ display: none !important; }
/* === OkObserver header/menu stability patch (append-only) ============ */
:root{
  --oo-h-desktop: 72px;   /* adjust if your header is taller/shorter */
  --oo-h-mobile:  64px;
}

/* 1) Stabilize header height so nothing "scoots" on open */
.oo-header, .site-header, header{
  position: sticky; top: 0; z-index: 1002;
  display: flex; align-items: center; justify-content: center;
  min-height: var(--oo-h-desktop);
}
@media (max-width: 899px){
  .oo-header, .site-header, header{ min-height: var(--oo-h-mobile); }
}

/* 2) Center brand/motto and reserve space on the RIGHT for the button */
.oo-brand, .site-branding, .brand{
  margin: 0 auto; text-align: center;
  padding-right: 60px; /* 44px button + gutter so it never overlaps the logo */
}

/* Motto should never be underlined, even if wrapped by a link */
.oo-motto, .site-motto, .motto,
.oo-motto a, .site-motto a, .motto a,
.oo-brand a .oo-motto, .brand a .motto{
  text-decoration: none !important;
  border: 0 !important;
}

/* 3) Pin hamburger on the RIGHT, vertically centered */
[data-oo="hamburger"], .oo-hamburger{
  position: absolute;
  right: 16px;
  top: calc(var(--oo-h-desktop) / 2);
  transform: translateY(-50%);
  width: 44px; height: 44px;
  display: inline-flex; align-items: center; justify-content: center;
  z-index: 1003; touch-action: manipulation; -webkit-tap-highlight-color: transparent;
}
@media (max-width: 899px){
  [data-oo="hamburger"], .oo-hamburger{
    right: 16px;
    top: calc(var(--oo-h-mobile) / 2);
  }
}

/* 4) Menu panel: fixed-position flyout on desktop; full-width drawer on mobile.
      (We DO NOT control visibility here—JS uses the [hidden] attribute.) */
.oo-menu, [data-oo="menu"]{
  position: fixed !important;
  z-index: 1001;
  background: #fff; border-radius: 12px; box-shadow: 0 12px 28px rgba(0,0,0,.18);
  padding: 12px 0;
}

/* Desktop flyout (stop the full-width banner) */
@media (min-width: 900px){
  .oo-menu, [data-oo="menu"]{
    top: var(--oo-h-desktop);
    right: 16px; left: auto !important;              /* force non-full-width */
    width: 320px; max-width: calc(100vw - 32px);
    max-height: calc(100vh - var(--oo-h-desktop) - 24px);
    overflow: auto;
  }
}

/* Mobile drawer */
@media (max-width: 899px){
  .oo-menu, [data-oo="menu"]{
    top: var(--oo-h-mobile);
    right: 0; left: 0; width: auto;
    border-radius: 0 0 12px 12px;
    max-height: calc(100vh - var(--oo-h-mobile));
    overflow: auto;
  }
}

/* 5) Let JS control visibility */
[hidden]{ display: none !important; }
/* 🟢 override.css — start of patch (tap behavior + right alignment) */
[data-oo="hamburger"], .oo-hamburger{
  user-select: none; -webkit-user-select: none; -webkit-touch-callout: none;
  cursor: pointer;
}

/* Motto should never underline on any link wrapping */
.oo-motto, .site-motto, .motto,
.oo-motto a, .site-motto a, .motto a{ text-decoration: none !important; border: 0 !important; }
/* 🔴 override.css — end of patch */
/* === Header/menu jitter + motto underline kill (append-only) ========== */

/* Keep a stable scrollbar gutter so opening the menu doesn't shift layout */
html { scrollbar-gutter: stable both-edges; }

/* Never underline the motto, even on hover/active/focus states */
.oo-motto, .site-motto, .motto,
.oo-motto a, .site-motto a, .motto a,
.oo-motto a:hover, .site-motto a:hover, .motto a:hover,
.oo-motto a:focus, .site-motto a:focus, .motto a:focus,
.oo-motto a:active, .site-motto a:active, .motto a:active {
  text-decoration: none !important;
  border: 0 !important;
  outline: 0 !important;
}

/* Ensure the hamburger stays on the right and doesn't steal layout space */
[data-oo="hamburger"], .oo-hamburger{
  position: absolute;
  right: 16px;
  /* top is already set by your previous patch; keep it as-is */
  user-select: none; -webkit-user-select: none; -webkit-touch-callout: none;
  cursor: pointer;
}

/* Menu is fixed so it doesn't reflow header; we DON'T touch visibility */
.oo-menu, [data-oo="menu"]{ position: fixed !important; }
[hidden]{ display: none !important; } /* visibility remains JS-controlled */
/* === Mobile header tap routing (append-only) ========================= */

/* Motto should NEVER underline, even on hover/focus/active */
.oo-motto, .site-motto, .motto,
.oo-motto a, .site-motto a, .motto a,
.oo-motto a:hover, .site-motto a:hover, .motto a:hover,
.oo-motto a:focus, .site-motto a:focus, .motto a:focus,
.oo-motto a:active, .site-motto a:active, .motto a:active {
  text-decoration: none !important;
  border: 0 !important;
  outline: 0 !important;
}

/* Make sure the hamburger is the top clickable thing */
[data-oo="hamburger"], .oo-hamburger{
  z-index: 10050;                 /* above brand/link */
  user-select: none;
  -webkit-user-select: none;
  -webkit-touch-callout: none;
  cursor: pointer;
}

/* On phones, prevent the big brand link from swallowing taps.
   (Logo doesn’t need to be a link on small screens.) */
@media (max-width: 899px){
  .oo-brand a,
  .site-branding a,
  .brand a {
    pointer-events: none;         /* taps go to the hamburger instead */
  }
}

/* Keep layout from shifting when the overlay appears */
html { scrollbar-gutter: stable both-edges; }

/* Visibility still controlled by JS via [hidden] */
[hidden]{ display:none !important; }
/* === OkObserver mobile hamburger: make it clearly clickable & topmost === */
[data-oo="hamburger"], .oo-hamburger{
  position: absolute;              /* stays to the right of centered logo */
  right: 16px;
  width: 44px; height: 44px;
  display: inline-flex; align-items: center; justify-content: center;
  z-index: 10050;                  /* above any brand/link layer */
  cursor: pointer;
  user-select: none; -webkit-user-select: none; -webkit-touch-callout: none;
  -webkit-tap-highlight-color: transparent;
  pointer-events: auto !important; /* MUST be clickable even if parent has PE:none */
}

/* Give a tiny visual feedback so it *feels* clickable */
[data-oo="hamburger"]:active, .oo-hamburger:active { transform: translateY(-50%) scale(0.96); }

/* Brand/motto should never underline on tap/focus */
.oo-motto, .site-motto, .motto,
.oo-motto a, .site-motto a, .motto a,
.oo-motto a:hover, .site-motto a:hover, .motto a:hover,
.oo-motto a:focus, .site-motto a:focus, .motto a:focus,
.oo-motto a:active, .site-motto a:active, .motto a:active {
  text-decoration: none !important; border: 0 !important; outline: 0 !important;
}

/* Menu is out of layout; visibility stays JS-controlled via [hidden] */
.oo-menu, [data-oo="menu"]{ position: fixed !important; z-index: 10040; }
[hidden]{ display: none !important; }

/* Keep layout from shifting when overlay/menu appears */
html { scrollbar-gutter: stable both-edges; }
/* === OkObserver header pointer-events + motto hover fix (append-only) === */

/* 1) Re-enable taps on the brand area on mobile so the hamburger can receive events */
@media (max-width: 899px){
  .oo-brand a,
  .site-branding a,
  .brand a {
    pointer-events: auto !important;   /* undo the earlier pointer-events:none */
  }
}

/* 2) Make sure the hamburger itself is always clickable, above everything */
[data-oo="hamburger"],
.oo-hamburger{
  pointer-events: auto !important;
  z-index: 10050;                      /* above any brand link or overlay */
}

/* 3) Motto must NEVER look like a link, even on hover/focus/active */
.oo-header .oo-motto,
.oo-header .oo-motto *,
.oo-header a .oo-motto,
.oo-header a .oo-motto *,
.site-header .motto,
.site-header .motto *,
.site-header a .motto,
.site-header a .motto *{
  text-decoration: none !important;
  border: 0 !important;
  outline: 0 !important;
  cursor: default !important;
}
/* Sticky header hardening — keep header fixed at top */
.oo-header {
  position: sticky;
  top: 0;
  z-index: 1000;
}
body {
  margin-top: 0;
}
/* Sticky header hardening — make sure header stays pinned on all scroll states */
body > .oo-header {
  position: sticky !important;
  top: 0;
  z-index: 9999; /* keep it above cards and overlays */
}

/* Safety: don't let some layout rule turn #app into a separate scroll area */
#app {
  overflow: visible !important;
}
/* === Mobile whitespace fix: remove accidental fixed-header offsets ===
   Replaces the old "Hard-lock header" block that set #app margin-top 160/190px.
*/
.oo-header {
  position: sticky !important; /* return to intended sticky behavior */
  top: 0 !important;
  left: auto !important;
  right: auto !important;
  width: auto !important;
}

html, body {
  padding-top: 0 !important; /* ensure no artificial top padding */
}

/* main app container (your HTML uses <main id="app">) */
main#app, #app {
  margin-top: 0 !important;
  padding-top: 0 !important;
}

/* === Featured image containment & centering (cards + detail) === */

/* Post summary cards: keep full image visible and centered */
.post-card .thumb img {
  display: block;
  width: 100%;
  height: auto;
  max-height: 260px;              /* keep grid tidy, but no hard crop */
  object-fit: contain;            /* show whole image, no top cut-off */
  object-position: center center; /* center instead of anchoring to top */
}

/* Detail hero image: also fully visible & centered */
.post-detail .hero {
  display: block;
  width: 100%;
  height: auto;
  object-fit: contain;
  object-position: center center;
}
/* === ROLLBACK: Restore original cropped (cover) featured images === */

/* Post summary cards: full-bleed cropped image */
.post-card .thumb img {
  width: 100% !important;
  height: 260px !important;     /* whatever your original target height was */
  object-fit: cover !important; /* crop to fill the space */
  object-position: center !important;
}

/* Detail hero image: full-bleed hero, cropped */
.post-detail .hero {
  width: 100% !important;
  height: auto !important;
  object-fit: cover !important;
  object-position: center !important;
}
/* === Fix: keep titles below featured image on post summary === */

/* Ensure the thumbnail is a block with the text flowing *after* it */
.post-card .thumb {
  display: block !important;
}

/* Restore normal block image behavior (no weird inline overlap) */
.post-card .thumb img {
  display: block !important;
  width: 100% !important;
  height: auto !important;        /* let height be determined by image */
  object-fit: cover !important;   /* allow cropping, as before */
  object-position: center !important;
}

/* Detail hero image: full-width block, cropped center */
.post-detail .hero {
  display: block !important;
  width: 100% !important;
  height: auto !important;
  object-fit: cover !important;
  object-position: center !important;
}
/* === Ensure post titles never overlap featured images === */
.post-card .thumb {
  margin-bottom: 12px !important;  /* consistent spacing below images */
}

/* Make sure images remain block elements (prevents overlap) */
.post-card .thumb img {
  display: block !important;
}
/* === Force a visible gap between featured image and post title === */

/* Make sure thumbnail is a block so margin flow works */
.post-card .thumb {
  display: block !important;
}

/* Ensure the image is a block element too */
.post-card .thumb img {
  display: block !important;
}

/* Add a fixed gap before the title on every card */
.post-card .title {
  margin-top: 12px !important;   /* adjust bigger/smaller if you like */
}
/* === Strong fix: keep post titles below featured images on summary === */

/* Make sure the thumbnail behaves like a normal block in the flow */
.posts-grid .post-card .thumb {
  display: block !important;
}

/* Ensure the image itself is a block and defines its own area */
.posts-grid .post-card .thumb img {
  display: block !important;
}

/* Force the title to sit below the image, never over it */
.posts-grid .post-card h2.title {
  position: static !important;      /* cancel any absolute positioning */
  margin-top: 14px !important;      /* fixed gap above the title */
  padding-top: 0 !important;
}

/* Keep the title link behaving like normal text */
.posts-grid .post-card h2.title a {
  display: inline !important;
}
/* === Grid card title/image spacing fix — 2025-11-13R1 === */

/* Stack each card vertically (image then text) */
.posts-grid .post-card {
  display: flex !important;
  flex-direction: column !important;
}

/* Thumbnail: block in the flow, no weird overlay */
.posts-grid .post-card .thumb {
  display: block !important;
  flex: 0 0 auto !important;
  margin: 0 !important;
}

/* Featured image: full width, automatic height, cropped center */
.posts-grid .post-card .thumb img {
  display: block !important;
  width: 100% !important;
  height: auto !important;
  object-fit: cover !important;
  object-position: center center !important;
}

/* Title: always below the image with a fixed gap */
.posts-grid .post-card h2.title {
  position: static !important;
  flex: 0 0 auto !important;
  margin: 12px 0 0 !important;  /* gap between image and title */
  padding: 0 !important;
}
/* === 2025-11-13R1: Hard fix to keep titles below images on summary cards === */

/* Ensure card content stacks normally */
.posts-grid .post-card {
  position: relative !important;
}

/* Thumbnail: block image area */
.posts-grid .post-card .thumb,
.posts-grid .post-card .thumb img {
  display: block !important;
}

/* FORCE the title to be a normal block BELOW the thumbnail */
.posts-grid .post-card h2.title {
  position: static !important;
  display: block !important;
  margin: 12px 0 0 !important;   /* gap between image and title */
  padding: 0 !important;
  top: auto !important;
  left: auto !important;
  right: auto !important;
  bottom: auto !important;
  transform: none !important;
}

/* Make sure the link inside behaves like normal text, not an overlay */
.posts-grid .post-card h2.title a {
  position: static !important;
  display: inline !important;
  margin: 0 !important;
  padding: 0 !important;
  top: auto !important;
  left: auto !important;
  right: auto !important;
  bottom: auto !important;
  transform: none !important;
}
/* === Extra spacing for summary card: post 382365 (A World-Class Ignoramus) === */

/* Select the card whose title links to #/post/382365 and add more gap */
.posts-grid .post-card a[href="#/post/382365"] {
  /* no visual change here, just a hook */
}

.posts-grid .post-card a[href="#/post/382365"] + h2.title {
  margin-top: 28px !important;   /* bigger gap under the image for this card only */
}
/* === Extra spacing specifically for summary card: post 382365 === */

/* Add more breathing room between the featured image and the title */
.posts-grid .post-card a[href="#/post/382365"] + h2.title {
  margin-top: 32px !important;     /* increase or decrease as needed */
}
/* === Extra spacing specifically for summary card: post 382365 === */

/* Increase breathing room between featured image and the title */
.posts-grid .post-card a[href="#/post/382365"] + h2.title {
  margin-top: 40px !important;
}
/* === Summary card title spacing === */

/* Default gap for all cards */
.posts-grid .post-card h2.title {
  margin-top: 16px;
}

/* Extra spacing specifically for post 382365 (A World-Class Ignoramus) */
.posts-grid .post-card a[href="#/post/382365"] + h2.title {
  margin-top: 40px;
}
/* === 2025-11-13R2: Summary card heroes use object-fit: contain === */

/* Thumbnail container stays in normal flow */
.posts-grid .post-card .thumb {
  display: block !important;
  overflow: hidden;              /* keeps things tidy if any weirdness */
}

/* Hero image on summary cards: show full image, don't crop */
.posts-grid .post-card .thumb img {
  display: block !important;
  width: 100% !important;
  height: auto !important;
  object-fit: contain !important;   /* key change: was effectively "cover" */
  object-position: center center !important;
  background-color: #f5f5f5;        /* light backdrop if there are side bars */
}
/* === 2025-11-13R3: fix text bumping into card edges on summary === */

/* Add consistent padding inside all summary cards for text content */
.posts-grid .post-card {
  padding-left: 14px !important;
  padding-right: 14px !important;
}

/* Do NOT pad the thumbnail area */
.posts-grid .post-card .thumb {
  margin-left: -14px !important;
  margin-right: -14px !important;
}

/* Ensure title, meta, and excerpt respect padding without touching edges */
.posts-grid .post-card h2.title,
.posts-grid .post-card .meta,
.posts-grid .post-card .excerpt,
.posts-grid .post-card p.excerpt {
  padding-left: 0 !important;
  padding-right: 0 !important;
}
/* === 2025-11-13R4: normalize spacing between thumbnail and title === */

/* Ensure some visual breathing room under every hero thumbnail */
.posts-grid .post-card .thumb {
  margin-bottom: 14px !important;   /* adjust this number to taste: 12–20px */
}
/* === 2025-11-13R5: normalize spacing between thumbnail and title on summary === */

/* Make every thumbnail block have the same bottom gap before the title */
.posts-grid .post-card .thumb {
  display: block !important;
  margin-bottom: 14px !important;   /* this is the white space under the image */
}

/* Ensure titles start right after that gap, not with their own random top margin */
.posts-grid .post-card h2.title {
  margin-top: 0 !important;
  padding-top: 0 !important;
}
/* === 2025-11-13R6: Masonry-style layout for post summary === */

/* Turn the posts grid into multi-column masonry instead of row-aligned grid */
#app .posts-grid {
  display: block !important;          /* override grid/flex */
  column-count: 4;                    /* desktop: 4 columns */
  column-gap: 24px;                   /* space between columns */
}

/* Tablet: 3 columns */
@media (max-width: 1024px) {
  #app .posts-grid {
    column-count: 3;
  }
}

/* Mobile: 1 column */
@media (max-width: 768px) {
  #app .posts-grid {
    column-count: 1;
  }
}

/* Cards must avoid breaking across columns and get vertical spacing */
#app .posts-grid .post-card {
  break-inside: avoid;
  margin-bottom: 24px;
  width: 100%;
}
/* === 2025-11-13R6 — Masonry-style layout for Post Summary === */

/* Turn the summary grid into Pinterest-style stacked columns */
#app .posts-grid {
  display: block !important;       /* override flex/grid */
  column-count: 4;                 /* desktop */
  column-gap: 24px;                /* space between columns */
  width: 100%;
}

/* Tablet: 3 columns */
@media (max-width: 1024px) {
  #app .posts-grid {
    column-count: 3;
  }
}

/* Mobile: 1 column */
@media (max-width: 768px) {
  #app .posts-grid {
    column-count: 1;
  }
}

/* Cards must stay intact & stack vertically */
#app .posts-grid .post-card {
  break-inside: avoid;
  page-break-inside: avoid;
  margin-bottom: 24px !important;   /* vertical spacing between posts */
  width: 100% !important;
  display: block !important;
}

/* Thumbnail styling still applies correctly inside masonry */
#app .posts-grid .post-card .thumb {
  width: 100%;
  display: block !important;
  margin-bottom: 14px !important;   /* consistent gap under image */
}
/* === 2025-11-13R7: Summary hero thumbnails use fixed aspect ratio + cover === */

/* Hero container on post summary cards */
#app .posts-grid .post-card .thumb {
  position: relative;
  width: 100%;
  aspect-ratio: 4 / 3;              /* adjust if you prefer 16/9 */
  overflow: hidden;
  margin-bottom: 14px !important;   /* space between image and title */
}

/* Image fills the box, center-cropped */
#app .posts-grid .post-card .thumb img {
  position: absolute;
  inset: 0;
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  object-position: center center;
}
/* === 2025-11-13R8: Summary hero thumbnails: 4:3 aspect ratio + cover === */

/* Thumbnail container on post-summary cards */
#app .posts-grid .post-card .thumb {
  position: relative !important;
  width: 100% !important;
  aspect-ratio: 4 / 3 !important;      /* Final choice: 4:3 ratio */
  overflow: hidden !important;
  margin-bottom: 14px !important;      /* consistent spacing under hero */
  display: block !important;
}

/* Image fills the box with center-crop behavior */
#app .posts-grid .post-card .thumb img {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;        /* crops edges, not centers */
  object-position: center center !important;
  display: block !important;
}
/* 🟢 2025-11-16 – Post detail tag pills */
.post-detail .detail-tags-row {
  margin-top: 24px;
  margin-bottom: 16px;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.post-detail .detail-tag-pill {
  display: inline-block;
  padding: 4px 12px;
  border-radius: 999px;
  background: rgba(30, 144, 255, 0.08); /* soft OkObserver blue tint */
  border: 1px solid #1E90FF;
  color: #1E90FF;
  font-size: 0.85rem;
  white-space: nowrap;
}
/* 🔴 2025-11-16 – end post detail tag pills */
/* 🟢 override.css — search page styles (append only) */
.search-page {
  max-width: 960px;
  margin: 0 auto;
  padding: 1.5rem 1rem 2rem;
}

.search-title {
  font-size: 1.75rem;
  margin: 0 0 1rem;
}

.search-form {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin-bottom: 0.75rem;
}

.search-label {
  flex: 1 1 220px;
}

.search-input {
  width: 100%;
  padding: 0.5rem 0.75rem;
  border-radius: 999px;
  border: 1px solid #ccc;
  font-size: 1rem;
}

.search-button {
  padding: 0.5rem 1.25rem;
  border-radius: 999px;
  border: none;
  background: #1E90FF;
  color: #fff;
  font-weight: 600;
  cursor: pointer;
}

.search-button:hover {
  opacity: 0.9;
}

.search-status {
  font-size: 0.9rem;
  margin-bottom: 0.75rem;
  color: #555;
}

/* Make sure search results still behave as masonry cards */
.search-results .post-card {
  break-inside: avoid;
}

/* Reusable visually-hidden class for accessibility labels */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  border: 0;
}
/* 🔴 override.css — search page styles (append only) */
/* 🟢 override.css — search spinner styles (append only) */
.search-status {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  min-height: 1.75rem;
  font-size: 1.05rem;
  font-weight: 500;
}

.search-spinner {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 2px solid #1E90FF;
  border-top-color: transparent;
  animation: search-spin 0.8s linear infinite;
}

.searching-label {
  font-weight: 600;
  font-size: 1.05rem;
}

@keyframes search-spin {
  to {
    transform: rotate(360deg);
  }
}
/* 🔴 override.css — search spinner styles (append only) */
/* 🟢 override.css — scrub leftover WP video wrappers (failsafe 2025-11-18R1) */
/* We use our own .video-embed player now, so WordPress embed wrappers can be hidden. */
.post-detail .wp-block-embed,
.post-detail .wp-block-embed__wrapper,
.post-detail .wp-embed-aspect-16-9,
.post-detail .wp-embed-aspect-4-3,
.post-detail .wp-block-video {
  display: none !important;
  margin: 0 !important;
  padding: 0 !important;
}
/* 🟢 override.css — hide WP lazyload iframe paragraph in post body (2025-11-19R1) */
.post-detail .post-body p:has(> iframe.lazyload) {
  display: none !important;
  margin: 0 !important;
  padding: 0 !important;
}
/* 🟢 override.css — search view SPA styling (2025-11-21R6) */
.search-view {
  max-width: 960px;
  margin: 0 auto;
  padding: 1.5rem 1rem 2rem;
}

.search-view .search-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  align-items: center;
  margin-bottom: 1rem;
}

.search-view .search-bar input[type="text"],
.search-view .search-bar input[type="search"] {
  flex: 1 1 220px;
  min-width: 0;
  padding: 0.5rem 0.75rem;
  border-radius: 999px;
  border: 1px solid #ccd3e0;
  font-size: 0.95rem;
  background: #fff;
  box-shadow: 0 1px 3px rgba(0,0,0,.05);
}

.search-view .search-bar input[type="text"]:focus-visible,
.search-view .search-bar input[type="search"]:focus-visible {
  outline: 2px solid var(--oko-blue);
  outline-offset: 2px;
  border-color: var(--oko-blue);
}

.search-view .search-bar button,
.search-view .search-bar #search-button {
  padding: 0.5rem 1rem;
  border-radius: 999px;
  border: 0;
  background: var(--oko-blue);
  color: #fff;
  font-weight: 600;
  font-size: 0.95rem;
  cursor: pointer;
  box-shadow: 0 2px 6px rgba(0,0,0,.12);
  white-space: nowrap;
}

.search-view .search-bar button:hover,
.search-view .search-bar #search-button:hover {
  filter: brightness(1.05);
}

.search-view .search-bar button:focus-visible,
.search-view .search-bar #search-button:focus-visible {
  outline: 3px solid var(--oko-blue);
  outline-offset: 2px;
}

#search-status {
  font-size: 0.9rem;
  margin: 0 0 0.5rem;
  color: #555;
}

.search-view .posts-grid.search-grid {
  column-gap: var(--oko-gap);
}

.search-view .posts-grid.search-grid .post-card {
  break-inside: avoid;
  margin: 0 0 var(--oko-gap);
}

.searching-indicator {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.95rem;
  color: #555;
}

.searching-indicator .spinner {
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 2px solid var(--oko-blue);
  border-top-color: transparent;
  animation: search-spin 0.8s linear infinite;
}

@keyframes search-spin {
  to {
    transform: rotate(360deg);
  }
}
/* 🔴 End search view SPA styling (2025-11-21R6) */
/* 🟢 override.css — search layout tweak (2025-11-21R7) */
/* Make search results grid use the same width feel as the home grid */
.search-view {
  max-width: 1200px;   /* match #app */
  padding-left: 0;     /* let #app padding handle the left/right spacing */
  padding-right: 0;
}

/* Add a bit of top margin so the grid doesn't crowd the bar */
.search-view .posts-grid.search-grid {
  margin-top: 0.75rem;
}
/* 🔴 end search layout tweak (2025-11-21R7) */
/* 🟢 override.css — tag pill reinforcement */

/* Tag row just above the Back button on detail pages */
.tags-row {
  margin-top: 1.5rem;
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
}

/* Individual tag “pills” */
.tag-chip {
  display: inline-block;
  padding: 4px 10px;
  border-radius: 999px;
  background-color: #e6f2ff;
  color: #1E90FF;
  font-size: 0.85rem;
  font-weight: 600;
  line-height: 1.2;
  white-space: nowrap;
}
/* OkObserver loading overlay – Spinning O */
#okobs-loading-overlay {
  position: fixed;
  inset: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #f5f5f5;
  z-index: 9999;
  transition: opacity 0.25s ease, visibility 0.25s ease;
}

#okobs-loading-overlay.okobs-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}

#okobs-loading-video {
  max-width: 200px;
  max-height: 200px;
  border-radius: 50%;
}
/* === About Page Layout Styles (2025-11-28) === */
/* All styles scoped to .about-page so nothing else gets touched */

.about-page {
  padding: 12px;
}

.about-page .about-grid {
  display: grid;
  gap: 16px;
}

/* Mobile (default = stacked cards) */
.about-page .about-card {
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.12);
  padding: 16px;
}

/* Images inside cards */
.about-page .about-image-wrap img,
.about-page .about-logo-wrap img {
  width: 100%;
  height: auto;
  border-radius: 10px;
  display: block;
  margin: 8px 0;
}

/* Titles use existing h1 style but ensure spacing */
.about-page h1 {
  margin-top: 0;
  font-weight: 700;
  color: #1E90FF; /* OkObserver Blue */
}

/* Desktop breakpoint */
@media (min-width: 768px) {
  .about-page .about-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}
/* 🟢 OkObserver — header search icon (append-only, safe) */
.oo-header .oo-search-trigger {
  position: absolute;
  right: 16px;          /* align with hamburger’s right edge */
  top: calc(50% + 20px);/* nudged below the hamburger */
  transform: translateY(-50%);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 999px;
  text-decoration: none;
  color: #ffffff;
  font-size: 18px;
  line-height: 1;
  padding: 0;
}

.oo-header .oo-search-trigger span {
  display: block;
}

.oo-header .oo-search-trigger:focus-visible {
  outline: 2px solid #ffffff;
  outline-offset: 2px;
}
/* 🔴 OkObserver — header search icon */
/* 🟢 OkObserver — ensure header brand/motto never show as a link */
.oo-brand,
.oo-brand:hover,
.oo-brand:focus,
.oo-brand:active {
  text-decoration: none;
}

.oo-brand .oo-motto {
  text-decoration: none;
}

/* If we use a header search icon link, don't underline that either */
.oo-header .oo-search-trigger,
.oo-header .oo-search-trigger:hover,
.oo-header .oo-search-trigger:focus,
.oo-header .oo-search-trigger:active {
  text-decoration: none;
}
/* 🟢 OkObserver — header controls (hamburger + search icon) */

/* Make sure the inner header can anchor absolutely-positioned controls */
.oo-header-inner {
  position: relative;
}

/* Right-side vertical stack: hamburger on top, search icon under it */
.oo-header-controls {
  position: absolute;
  right: 16px;
  top: 50%;
  transform: translateY(-50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 4px;
  z-index: 2; /* keep above background but below overlay menu */
}

/* Spacer on the right is layout-only, no need to render on small screens */
.oo-header-spacer {
  display: none;
}

/* Search icon styling */
.oo-header .oo-search-trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 999px;
  text-decoration: none;
  color: #ffffff;
  font-size: 18px;
  line-height: 1;
  padding: 0;
  background: transparent;
  border: none;
  cursor: pointer;
}

.oo-header .oo-search-trigger span {
  display: block;
}

/* Focus outline for keyboard users */
.oo-header .oo-search-trigger:focus-visible {
  outline: 2px solid #ffffff;
  outline-offset: 2px;
}

/* 🟢 OkObserver — ensure header brand/motto never show as a link */
.oo-brand,
.oo-brand:hover,
.oo-brand:focus,
.oo-brand:active {
  text-decoration: none;
}

.oo-brand .oo-motto {
  text-decoration: none;
}

/* Also keep the header search icon from getting the global underline */
.oo-header .oo-search-trigger,
.oo-header .oo-search-trigger:hover,
.oo-header .oo-search-trigger:focus,
.oo-header .oo-search-trigger:active {
  text-decoration: none;
}
/* 🔴 OkObserver — header controls + motto link guard */
/* 🟢 OkObserver — revert hamburger to original position */

.oo-header .oo-hamburger {
  position: inherit !important; /* Back to previous natural/static flow */
  right: auto !important;
  top: auto !important;
  transform: none !important;
}

/* If using a flex header layout, re-enable original alignment */
.oo-header-inner {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

/* Maintain search icon positioning */
.oo-header-controls {
  position: absolute;
  right: 16px;
  top: calc(50% + 16px); /* nudged slightly below original hamburger level */
  transform: translateY(-50%);
  display: inline-flex;
  flex-direction: column;
  gap: 6px;
}

.oo-header .oo-search-trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  font-size: 18px;
  text-decoration: none !important;
  color: white;
  cursor: pointer;
}

/* 🔴 OkObserver — hamburger restored, search remains */
/* 🟢 OkObserver — header layout: brand left, hamburger + search stacked on right */

/* Ensure the header inner uses flex for left/right alignment */
.oo-header-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

/* Right-side vertical stack: hamburger on top, search icon under it */
.oo-header-right {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
}

/* Search icon styling */
.oo-header .oo-search-trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 999px;
  text-decoration: none;
  color: #ffffff;
  font-size: 18px;
  line-height: 1;
  padding: 0;
  background: transparent;
  border: none;
  cursor: pointer;
}

.oo-header .oo-search-trigger span {
  display: block;
}

/* Focus outline for keyboard users */
.oo-header .oo-search-trigger:focus-visible {
  outline: 2px solid #ffffff;
  outline-offset: 2px;
}

/* Ensure brand/motto never look like a link */
.oo-brand,
.oo-brand:hover,
.oo-brand:focus,
.oo-brand:active {
  text-decoration: none;
}

.oo-brand .oo-motto {
  text-decoration: none;
}

/* Also keep the header search icon from getting the global underline */
.oo-header .oo-search-trigger,
.oo-header .oo-search-trigger:hover,
.oo-header .oo-search-trigger:focus,
.oo-header .oo-search-trigger:active {
  text-decoration: none;
}
/* 🔴 OkObserver — header layout + link guards */
/* 🟢 OkObserver — header restore + search icon stack */

/* Force the intended 3-column grid header layout */
.oo-header-inner {
  display: grid !important;
  grid-template-columns: 48px 1fr 48px !important;
  align-items: center;
  max-width: 1200px;
  margin: 0 auto;
  padding: 10px 16px;
}

/* Left spacer just occupies the first column */
.oo-header-spacer {
  width: 48px;
  height: 1px;
}

/* Right side: hamburger on top, search icon below */
.oo-header-right {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
}

/* Search icon appearance */
.oo-header .oo-search-trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 999px;
  border: none;
  padding: 0;
  margin: 0;
  background: transparent;
  color: #ffffff;
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
  text-decoration: none;
}

.oo-header .oo-search-trigger span {
  display: block;
}

/* Keyboard focus outline for accessibility */
.oo-header .oo-search-trigger:focus-visible {
  outline: 2px solid #ffffff;
  outline-offset: 2px;
}

/* Ensure brand/motto never look like a link */
.oo-brand,
.oo-brand:hover,
.oo-brand:focus,
.oo-brand:active {
  text-decoration: none;
}

.oo-brand .oo-motto {
  text-decoration: none;
}

/* Also keep the header search icon from using global link underline */
.oo-header .oo-search-trigger,
.oo-header .oo-search-trigger:hover,
.oo-header .oo-search-trigger:focus,
.oo-header .oo-search-trigger:active {
  text-decoration: none;
}
/* 🔴 OkObserver — header restore + search icon stack */
/* 🟢 OkObserver — header restore + search icon stack */

/* Force the intended 3-column grid header layout */
.oo-header-inner {
  display: grid !important;
  grid-template-columns: 48px 1fr 48px !important;
  align-items: center;
  max-width: 1200px;
  margin: 0 auto;
  padding: 10px 16px;
}

/* Left spacer just occupies the first column */
.oo-header-spacer {
  width: 48px;
  height: 1px;
}

/* Right side: hamburger on top, search icon below */
.oo-header-right {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 4px;
}

/* Search icon appearance */
.oo-header .oo-search-trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 999px;
  border: none;
  padding: 0;
  margin: 0;
  background: transparent;
  color: #ffffff;
  font-size: 18px;
  line-height: 1;
  cursor: pointer;
  text-decoration: none;
}

.oo-header .oo-search-trigger span {
  display: block;
}

/* Keyboard focus outline for accessibility */
.oo-header .oo-search-trigger:focus-visible {
  outline: 2px solid #ffffff;
  outline-offset: 2px;
}

/* Ensure brand/motto never look like a link */
.oo-brand,
.oo-brand:hover,
.oo-brand:focus,
.oo-brand:active {
  text-decoration: none;
}

.oo-brand .oo-motto {
  text-decoration: none;
}

/* Also keep the header search icon from using global link underline */
.oo-header .oo-search-trigger,
.oo-header .oo-search-trigger:hover,
.oo-header .oo-search-trigger:focus,
.oo-header .oo-search-trigger:active {
  text-decoration: none;
}
/* 🔴 OkObserver — header restore + search icon stack */
/* 🟢 OkObserver — mobile/desktop hamburger vertical alignment fix (append-only) */
/* Ensure the absolutely positioned hamburger is vertically centered in the header. */
/* 🟢 OkObserver — MOBILE hamburger vertical alignment fix (append-only)
   Mobile uses absolute positioning, so we center with top:50% + translateY(-50%) */
@media (max-width: 768px) {
  [data-oo="hamburger"], .oo-hamburger {
    top: 50%;
    transform: translateY(-50%);
  }
}
/* 🟢 B) Desktop hamburger jump fix — preserve translateY on press (append-only) */
/* 🟢 B) Desktop hamburger jump fix — never change transform on press (append-only) */
@media (min-width: 769px) {
  [data-oo="hamburger"],
  .oo-hamburger {
    transform: none !important;
    top: auto !important;
  }

  [data-oo="hamburger"]:active,
  .oo-hamburger:active {
    transform: none !important; /* prevents click-jump */
    opacity: 0.85;              /* optional press feedback */
  }
}

/* 🔴 B) Desktop hamburger jump fix */

/* 🔴 OkObserver — mobile/desktop hamburger vertical alignment fix */
/* 🔧 Mobile hamburger visibility fix — safe append only */
@media (max-width: 768px) {
  .oo-header-inner {
    display: flex !important;
    justify-content: space-between !important;
    align-items: center;
  }

  .oo-hamburger {
    display: block !important;
    position: relative !important;
    right: 0 !important;
    margin-left: auto !important;
    font-size: 1.6rem !important; /* Adjust for finger tap target */
    line-height: 1 !important;
    visibility: visible !important;
    opacity: 1 !important;
  }

  /* Ensure logo doesn’t get pushed off screen */
  .oo-brand {
    max-width: calc(100% - 50px) !important;
  }
}
/* 🔧 Mobile header fix: keep brand centered, hamburger to the right */
@media (max-width: 768px) {
  .oo-header-inner {
    justify-content: center !important;   /* re-center logo + motto */
  }

  .oo-brand {
    margin: 0 auto !important;
    text-align: center !important;
    padding-right: 60px !important;       /* reserve space for hamburger */
  }

  .oo-hamburger,
  [data-oo="hamburger"] {
    position: absolute !important;
    right: 16px !important;
    top: 50% !important;
    transform: translateY(-50%) !important;
    margin-left: 0 !important;
    width: 44px !important;
    height: 44px !important;
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
  }
}
/* 🟢 OkObserver — mobile header alignment: brand truly centered, hamburger on the right */
@media (max-width: 768px) {
  .oo-header-inner {
    position: relative !important;
    display: flex !important;
    justify-content: center !important;   /* center the brand block */
    align-items: center !important;
  }

  .oo-header .oo-brand {
    margin: 0 auto !important;
    text-align: center !important;
    max-width: 80% !important;           /* leave some room so text doesn’t hit the edges */
    padding-right: 0 !important;         /* no artificial push left */
  }

  .oo-header .oo-hamburger,
  .oo-header [data-oo="hamburger"] {
    position: absolute !important;       /* take it OUT of flex layout */
    right: 12px !important;             /* closer in so it’s not “way out there” */
    top: 50% !important;
    transform: translateY(-50%) !important;
    margin: 0 !important;
    width: 44px !important;
    height: 44px !important;
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
  }
}
/* 🔴 OkObserver — mobile header alignment */
/* 🟢 OkObserver — mobile logo centering fix */
@media (max-width: 768px) {
  .oo-header .oo-brand {
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;   /* center children horizontally */
    text-align: center !important;
  }

  .oo-header .oo-logo {
    margin: 0 auto !important;        /* force logo to sit dead center */
    display: block !important;
  }

  .oo-header .oo-motto {
    text-align: center !important;    /* keep current good behavior */
  }
}
/* 🔴 OkObserver — mobile logo centering fix */
/* 🟢 OkObserver — mobile logo true-centering override */
@media (max-width: 768px) {
  /* Make the brand block itself truly centered with symmetric padding */
  .oo-header .oo-brand {
    padding: 0.5rem 1rem 0.6rem 1rem !important; /* same left/right */
    display: flex !important;
    flex-direction: column !important;
    align-items: center !important;
    text-align: center !important;
  }

  /* Force the logo to sit dead-center above the motto */
  .oo-header .oo-logo {
    width: auto !important;
    max-width: 100% !important;
    height: 34px !important;          /* keep existing header logo height */
    margin: 0 auto !important;        /* center in the brand block */
    display: block !important;
  }

  .oo-header .oo-motto {
    text-align: center !important;
  }
}
/* 🔴 OkObserver — mobile logo true-centering override */
/* 🟢 OkObserver — mobile logo size enhancement */
@media (max-width: 768px) {
  .oo-header .oo-logo {
    height: 42px !important;         /* safely increased from 34px */
    max-height: 45px !important;     /* cap if necessary */
    width: auto !important;
  }
}
/* 🟢 oo-splash size control — 2025-12-06 splashFullscreen1 */
/* Full-screen splash overlay, centered video, covers header + page */
.oo-splash {
  position: fixed;
  inset: 0;               /* top:0; right:0; bottom:0; left:0 */
  z-index: 1000;          /* above sticky header and content */
  display: flex;
  align-items: center;
  justify-content: center;
  background: #000;       /* letterbox bars around video */
  overflow: hidden;
}

/* Splash video or fallback image fills viewport, keeps aspect */
.oo-splash-video,
.oo-splash-fallback-image {
  width: 100%;
  height: 100%;
  max-width: 100vw;
  max-height: 100vh;
  object-fit: contain;    /* show entire animation, no cropping */
  display: block;
}

/* Mobile: same behavior, just keep it full screen */
@media (max-width: 768px) {
  .oo-splash {
    inset: 0;
  }
}
/* 🔴 oo-splash size control — 2025-12-06 splashFullscreen1 */
/* Loader overlay – 2025-12-02 loaderOverlayR1 */
.oo-loader {
  position: fixed;
  inset: 0;
  background: #f4f6fb;
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 9999;
  transition: opacity 0.3s ease, visibility 0.3s ease;
}

.oo-loader-inner {
  padding: 24px 32px;
  border-radius: 999px;
  background: #ffffff;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.18);
}

.oo-loader-logo {
  max-width: 260px;
  width: 60vw;
  height: auto;
  display: block;
}

/* When hidden, fade out and stop intercepting clicks */
.oo-loader--hidden {
  opacity: 0;
  visibility: hidden;
}

/* Kill the old splash hero entirely */
.oo-splash {
  display: none !important;
}
/* Emergency: disable loader overlay completely – 2025-12-02 loaderOffR1 */
.oo-loader,
.oo-loader--hidden {
  display: none !important;
}
/* 🟢 hamburger-visibility-patch — 2025-12-03R1 */
.oo-hamburger {
  display: inline-flex !important;
  align-items: center;
  justify-content: center;
}

/* 🔴 hamburger-visibility-patch — 2025-12-03R1 */
/* Facebook "Watch on Facebook" overlay — small, centered pill */
.post-detail .post-hero {
  position: relative; /* ensure hero can anchor the overlay */
}

.fb-watch-overlay {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);

  /* force it to hug the text */
  display: inline-block;
  padding: 4px 10px;
  line-height: 1.2;
  border-radius: 999px;

  background: #1E90FF;  /* OkObserver blue */
  color: #fff;
  font-size: 14px;
  font-weight: 600;
  white-space: nowrap;
  text-decoration: none;

  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.25);
  cursor: pointer;

  /* nuke any global width/height rules */
  width: auto !important;
  height: auto !important;
  box-sizing: border-box;
}

.fb-watch-overlay:hover,
.fb-watch-overlay:focus-visible {
  filter: brightness(1.07);
}

/* Hide broken inline Facebook video players; rely on hero overlay instead */
#app article iframe[src*="facebook.com"],
#app article .fb-video,
#app article .fb-post {
  display: none !important;
}
/* Hide broken inline Facebook video players; rely on hero overlay instead */
#app article iframe[src*="facebook.com"],
#app article .fb-video,
#app article .fb-post {
  display: none !important;
}

/* Also collapse the empty blocks / wrappers that only contained the Facebook iframe */
#app article p:has(iframe[src*="facebook.com"]),
#app article div:has(iframe[src*="facebook.com"]),
#app article figure:has(iframe[src*="facebook.com"]),
#app article .wp-block-embed:has(iframe[src*="facebook.com"]),
#app article .wp-block-embed__wrapper:has(iframe[src*="facebook.com"]),
#app article p:has(.fb-video),
#app article div:has(.fb-video),
#app article figure:has(.fb-video),
#app article .wp-block-embed:has(.fb-video),
#app article .wp-block-embed__wrapper:has(.fb-video),
#app article p:has(.fb-post),
#app article div:has(.fb-post),
#app article figure:has(.fb-post),
#app article .wp-block-embed:has(.fb-post),
#app article .wp-block-embed__wrapper:has(.fb-post) {
  display: none !important;
}
/* Kill the extra Facebook thumbnail wrapper under the hero image */
#app article .post-detail-content div.mc-temp,
#app article .post-detail-content div:has(> p > a[href*="facebook.com/OkObserver/videos"] > img),
#app article .post-detail-content div:has(> p > a[href*="facebook.com/watch"] > img) {
  display: none !important;
}

/* Remove stray empty paragraphs below the hero */
#app article .post-detail-content p:empty,
#app article .post-detail-content p:has(br:only-child) {
  display: none !important;
}

/* Hide duplicate Facebook thumbnail block under hero */
#app article .post-detail-content p:has(a[href*="facebook.com/OkObserver/videos"] img),
#app article .post-detail-content p:has(a[href*="facebook.com/watch"] img) {
  display: none !important;
}

/* Remove stray empty paragraphs in post detail content */
#app article .post-detail-content p:empty,
#app article .post-detail-content p:has(br:only-child) {
  display: none !important;
}

/* ================================
   OkObserver — Byline Color Fix
   ================================ */
.post-card-meta,
.post-meta {
  color: #1E90FF !important;
  font-weight: bold !important;
}
/* ================================
   OkObserver — TTS icon-only style
   ================================ */
.tts-button {
  background: none;
  border: none;
  padding: 0;
  margin: 0;
  font-size: 1.4rem;
  line-height: 1;
  cursor: pointer;
}

.post-detail-tts-row {
  margin: 1rem 0 0.75rem;
}
/* ================================
   OkObserver — Byline + TTS icon
   ================================ */
.post-card-meta,
.post-meta {
  color: #1E90FF !important;
  font-weight: bold !important;
}

.tts-button {
  background: none;
  border: none;
  padding: 0;
  margin: 0;
  font-size: 1.4rem;
  line-height: 1;
  cursor: pointer;
}

.post-detail-tts-row {
  margin: 1rem 0 0.75rem;
}
/* === About page layout — classic 3-column === */

.about-view {
  max-width: 1200px;
  margin: 1.5rem auto 3rem;
  padding: 0 16px;
}

.about-grid {
  display: grid;
  grid-template-columns: 1fr;              /* mobile: single column */
  gap: 18px;
  align-items: start;
}

/* Tablet: 2 columns */
@media (min-width: 720px) {
  .about-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* Desktop: 2 columns (wider cards) */
@media (min-width: 1024px) {
  .about-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
.about-card {
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 2px 10px rgba(0,0,0,.08);
  padding: 16px 18px 18px;
}

.about-card h1,
.about-card h2,
.about-card h3 {
  margin-top: 0;
  margin-bottom: 0.5rem;
  color: #1E90FF;
}

.about-card p {
  margin: 0 0 0.65rem;
}

.about-logo-wrap,
.about-image-wrap {
  text-align: center;
  margin-bottom: 0.75rem;
}

.about-logo,
.about-image-wrap img {
  max-width: 100%;
  height: auto;
  border-radius: 10px;
}

/* Let long “contact us” blocks span full width on big screens if desired */
.about-contact {
  grid-column: 1 / -1;
}
/* Detail hero image should be contained, not cropped */
.post-detail .post-hero .oo-media {
  width: 100%;
  height: auto;
  aspect-ratio: auto;
  object-fit: contain;
  object-position: center center;
  border-bottom: none;
}
/* Detail video players – full-width, comfortable height */
.post-detail .video-embed,
.post-detail .video-embed-wrapper {
  margin: 12px 0 20px;
}

.post-detail .video-embed iframe,
.post-detail .video-embed video,
.post-detail .video-embed-wrapper iframe,
.post-detail .video-embed-wrapper video {
  display: block;
  width: 100%;
  max-width: 100%;
  height: auto;
  aspect-ratio: 16/9;
  border: 0;
}
/* Detail video sizing – make all embedded players full-width */
.post-detail .video-embed,
.post-detail .video-embed-wrapper {
  margin: 12px 0 20px;
}

.post-detail .video-embed,
.post-detail .video-embed iframe,
.post-detail .video-embed video,
.post-detail .video-embed-wrapper iframe,
.post-detail .video-embed-wrapper video {
  display: block;
  width: 100%;
  max-width: 100%;
  height: auto;
  aspect-ratio: 16/9;
  border: 0;
}
}
/* Facebook "Watch on Facebook" overlay, centered over the hero image */
.post-hero {
  position: relative; /* safe even if already set elsewhere */
}

.fb-watch-overlay {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: 0.4rem 0.9rem;
  border-radius: 9999px;
  background-color: #1E90FF; /* OkObserver blue */
  color: #ffffff;
  font-size: 0.9rem;
  font-weight: 600;
  text-decoration: none;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.3);
  white-space: nowrap;
  z-index: 5;
}

.fb-watch-overlay:hover,
.fb-watch-overlay:focus-visible {
  background-color: #1c7fdc;
  text-decoration: none;
}
/* Facebook placeholder cleanup: remove empty hero/link block that leaves big gap */
.post-detail-content > .mc-temp {
  display: none !important;
}

.post-detail-content > p > a[href*="facebook.com"] {
  display: none !important;
}
/* Clean up empty blocks in legacy .post-detail-content wrapper (fix big white gaps under videos) */
.post-detail-content p:empty,
.post-detail-content p:has(br:only-child),
.post-detail-content p:has(img:empty),
.post-detail-content div:empty,
.post-detail-content figure:empty {
  display: none !important;
}
/* Collapse leftover video screenshot wrappers and blank paragraphs under detail players */
/* Detail video wrapper: let the player be visible */
.post-detail-content .video-embed-wrapper {
  margin: 12px 0 20px !important;
  padding: 0 !important;
  width: 100% !important;
  max-width: 100% !important;
  overflow: visible !important;
  min-height: 0 !important; /* no forced zero-height */
  height: auto !important;
}

/* Make sure the iframe/video fills the wrapper nicely */
.post-detail-content .video-embed-wrapper iframe,
.post-detail-content .video-embed-wrapper video {
  display: block !important;
  width: 100% !important;
  height: auto !important;
  max-width: 100% !important;
}

/* Optional: captions under the player, but NOT zero-height */
.post-detail-content .video-embed-wrapper figcaption {
  margin: 6px 0 0 !important;
  padding: 0 !important;
  font-size: 0.85rem;
  line-height: 1.4;
  overflow: visible !important;
}


/* Remove empty paragraphs between the player and the article body */
.post-detail-content p:empty {
  margin: 0 !important;
  padding: 0 !important;
  line-height: 0 !important;
  height: 0 !important;
}
/* 🟢 detail-video-gap-fix 2025-12-04R1 */
/* Clamp Vimeo/YT/Facebook iframes and kill phantom spacer paragraphs
   on post *detail* pages only. */

.post-detail .post-body iframe,
.post-detail .post-body .wp-block-embed__wrapper iframe,
.post-detail .post-body .wp-block-embed iframe {
  /* Let the iframe size itself; don’t force giant ghost height */
  min-height: 0 !important;
}

/* Their outer Gutenberg wrappers should also not reserve tall space */
.post-detail .post-body figure.wp-block-embed,
.post-detail .post-body .wp-block-embed__wrapper {
  min-height: 0 !important;
}

/* Nuke spacer paragraphs that are literally empty or just a <br> */
.post-detail .post-body p:empty,
.post-detail .post-body p:has(> br:only-child) {
  display: none !important;
}

/* Make sure the first real block after the video doesn’t start miles down */
.post-detail .post-body iframe + p,
.post-detail .post-body iframe + figure,
.post-detail .post-body iframe + div {
  margin-top: 8px !important;
}
/* 🔴 detail-video-gap-fix 2025-12-04R1 */
/* --- Remove blank WP paragraphs that create giant gaps --- */
.post-detail-content p:empty,
.post-detail-content p:empty::before,
.post-detail-content p:empty::after {
    margin: 0 !important;
    padding: 0 !important;
    height: 0 !important;
    min-height: 0 !important;
    line-height: 0 !important;
    display: none !important;
}
/* Hide WP-inserted 1x1 SVG spacer paragraphs that create big white gaps */
.post-detail .post-body p:has(> svg[width="1"][height="1"]) {
  display: none !important;
}
/* === videoWhitespaceFix-2025-12-04 === */
/* We render our own top-of-article player; hide the leftover lazy iframe block
   that WordPress/shortcodes leave inside the article body. */
.post-detail-content p > iframe.lazyload,
.post-detail-content p:has(> iframe.lazyload) {
  display: none !important;
}

/* Safety: remove any truly empty paragraphs inside post detail content */
.post-detail-content p:empty {
  display: none !important;
}
/* Hide WordPress screenshot preview images under real video players */
.post-detail-content figure.wp-caption {
  display: none !important;
}

/* Also remove lone <p></p> blocks after the figure */
.post-detail-content p:empty {
  display: none !important;
}
/* === About Page Layout (Dynamic WP Content → 3 Flexible Columns) === */
.about-view {
  max-width: 1200px;
  margin: 0 auto;
  padding: 1.5rem 1rem 3rem;
}

.about-title {
  font-size: 1.75rem;
  margin: 0 0 1.5rem;
  text-align: center;
}

.about-content {
  width: 100%;
}

.about-columns {
  display: flex;
  flex-wrap: wrap;
  gap: 1.5rem;
}

.about-column {
  flex: 1 1 260px;
  min-width: 0;
}

.about-column-title {
  font-size: 1.2rem;
  margin: 0 0 0.75rem;
  font-weight: 600;
}

.about-image {
  width: 100%;
  height: auto;
  display: block;
  margin-bottom: 0.75rem;
  border-radius: 8px;
}

.about-column p {
  margin: 0 0 0.5rem;
  line-height: 1.5;
}
/* === Dynamic About page content === */
.about-view {
  max-width: 900px;
  margin: 1.5rem auto 3rem;
  padding: 0 16px;
}

.about-title {
  font-size: 1.75rem;
  margin: 0 0 1.5rem;
  text-align: center;
}

.about-html h1,
.about-html h2,
.about-html h3 {
  margin-top: 1.5rem;
  margin-bottom: 0.5rem;
}

.about-html p {
  margin: 0 0 0.5rem;
  line-height: 1.5;
}

.about-html img.about-image {
  display: block;
  max-width: 100%;
  height: auto;
  margin: 0 0 0.75rem;
  border-radius: 8px;
}
/* === About Page: 3-Column Grid Layout Override === */

.about-html {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}

/* Medium screens: 2 columns */
@media (min-width: 700px) {
  .about-html {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* Large screens: 3 columns */
@media (min-width: 1100px) {
  .about-html {
    grid-template-columns: repeat(3, 1fr);
  }
}

/* Normalize WP content blocks so they behave like cards */
.about-html > div,
.about-html > section,
.about-html .wpb_row,
.about-html .wpb_column,
.about-html .vc_row,
.about-html .vc_column_container {
  background: #fff;
  border-radius: 10px;
  padding: 16px;
  box-shadow: 0 1px 4px rgba(0,0,0,0.08);
}

/* Fix images so they fit inside card blocks */
.about-html img {
  width: 100%;
  height: auto;
  border-radius: 8px;
  margin-bottom: 12px;
}
/* 🟢 About page layout — 3 columns desktop, 1 column mobile */
.about-content {
  max-width: 1100px;
  margin: 32px auto 64px;
  padding: 0 16px;
}

.about-columns {
  display: grid;
  grid-template-columns: 1.1fr 1.2fr 1.1fr;
  gap: 24px;
  align-items: flex-start;
}

.about-column {
  font-size: 0.98rem;
  line-height: 1.5;
}

.about-column img {
  max-width: 100%;
  height: auto;
  display: block;
  margin-bottom: 12px;
  border-radius: 8px;
}

.about-column h2 {
  margin: 0 0 8px;
  font-size: 1.1rem;
}

.about-column p {
  margin: 0 0 10px;
}

/* Stack columns on smaller screens */
@media (max-width: 900px) {
  .about-columns {
    grid-template-columns: 1fr;
  }
  .about-column {
    margin-bottom: 24px;
  }
}
/* 🔴 About page layout — end */
/* ---------------------------
   ABOUT PAGE 3-COLUMN LAYOUT
   --------------------------- */
.about-content {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
  margin-top: 32px;
}

.about-column {
  background: #ffffff;
  padding: 24px;
  border-radius: 12px;
  box-shadow: 0 2px 8px rgba(0,0,0,0.08);
}

/* Tablet */
@media (max-width: 1024px) {
  .about-content {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* Mobile */
@media (max-width: 600px) {
  .about-content {
    grid-template-columns: 1fr;
  }
}
/* OkObserver About page: make cards wide enough to read */
.about-grid {
  /* Each card is at least 260px wide; browser chooses 1, 2, or 3 columns
     depending on available space, but never makes them skinny slivers. */
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
/* OkObserver About page: make cards wide enough to read */
.about-grid {
  /* Each card is at least 260px wide; browser chooses 1, 2, or 3 columns
     depending on available space, but never makes them skinny slivers. */
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
/* 🟦 About view layout – fix skinny TagDiv columns and make readable cards */
.about-view .about-content,
.about-view .about-html {
  max-width: 1100px;
  margin: 0 auto 60px auto;
  padding: 0 16px 40px;
  display: grid;
  grid-template-columns: repeat(3, minmax(280px, 1fr));
  gap: 32px;
  align-items: flex-start;
}

/* Make each About card fill its grid cell */
.about-view .about-column {
  width: 100%;
  background: #ffffff;
  border-radius: 16px;
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.08);
  padding: 24px 24px 28px;
}

/* Kill TagDiv’s old 1/3-width columns inside each card */
.about-view .about-column [class*="td-pb-span"],
.about-view .about-column .tdc-columns,
.about-view .about-column .tdc-row,
.about-view .about-column .wpb_wrapper,
.about-view .about-column .wpb_column {
  width: 100% !important;
  max-width: 100% !important;
  float: none !important;
}

/* Tablet: 2 columns */
@media (max-width: 1100px) {
  .about-view .about-content,
  .about-view .about-html {
    grid-template-columns: repeat(2, minmax(260px, 1fr));
  }
}

/* Mobile: 1 column */
@media (max-width: 768px) {
  .about-view .about-content,
  .about-view .about-html {
    grid-template-columns: 1fr;
  }
}

/* --------------------------------------------------
   About page layout – 3 wide cards
   -------------------------------------------------- */

article.about-view {
  max-width: 1200px;
  margin: 2rem auto 4rem;
  padding: 0 1.5rem;
}

.about-content {
  /* 3 columns on desktop, auto-wrap on smaller screens */
  display: grid;
  grid-template-columns: repeat(3, minmax(260px, 1fr));
  gap: 32px;
  align-items: flex-start;
}

/* Individual cards */
.about-column {
  background: #ffffff;
  border-radius: 16px;
  box-shadow: 0 8px 20px rgba(0, 0, 0, 0.08);
  padding: 28px 24px;
  box-sizing: border-box;
}

/* Headings in the cards */
.about-column h1,
.about-column h2,
.about-column h3 {
  margin-top: 0;
}

/* Images inside the cards */
.about-column img {
  display: block;
  max-width: 100%;
  height: auto;
  margin: 1rem auto 0;
  border-radius: 8px;
}

/* Mobile / tablet: stack nicely */
@media (max-width: 900px) {
  .about-content {
    grid-template-columns: minmax(0, 1fr);
  }
}
.about-column img.about-image-full {
    width: 100%;
    height: auto;
    display: block;
    margin: 1rem 0;
    object-fit: cover;
    border-radius: 6px;
}
.about-column img.about-image-full {
    width: 100%;
    height: auto;
    display: block;
    margin-bottom: 1rem;
    object-fit: cover;
    border-radius: 8px;
}
.about-column img {
    max-width: 100% !important;
    height: auto !important;
    display: block !important;
}
.about-html img {
    width: 100% !important;
    height: auto !important;
    display: block !important;
    max-width: 100% !important;
}
/* === ABOUT PAGE IMAGE FIX — FULL-WIDTH IMAGES === */
.about-column img {
  width: 100% !important;
  height: auto !important;
  max-width: 100% !important;
  object-fit: contain !important;
  display: block !important;
  margin: 0 0 20px 0 !important;
}
/* About page layout – appended safely at end */
.about-view {
  max-width: 1200px;
  margin: 0 auto;
  padding: 1.5rem 1rem 2.5rem;
}

.about-title {
  font-size: 2rem;
  font-weight: 700;
  text-align: center;
  margin-bottom: 1.5rem;
}

.about-content {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 1.5rem;
  align-items: flex-start;
}

/* Stack to 2 columns on medium, 1 column on small */
@media (max-width: 960px) {
  .about-content {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 640px) {
  .about-content {
    grid-template-columns: 1fr;
  }
}

.about-column {
  background: #ffffff;
  border-radius: 0.75rem;
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.12);
  padding: 1.25rem 1.5rem 1.5rem;
  line-height: 1.5;
}

/* Full-width About images inside each column */
.about-column img,
.about-image-full {
  display: block;
  width: 100%;
  height: auto;
  margin: 0 0 0.75rem 0;
  border-radius: 0.5rem;
  object-fit: cover;
}
/* ------------------------------------------------------------------ */
/* Search view polish to match OkObserver card/grid style             */
/* ------------------------------------------------------------------ */

.search-view {
  max-width: 1200px;
  margin: 40px auto 64px;
  padding: 0 16px 48px;
}

.search-title {
  font-size: 1.8rem;
  font-weight: 700;
  text-align: center;
  margin-bottom: 24px;
  color: #1E90FF; /* OkObserver blue */
}

.search-form {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: 12px;
  margin-bottom: 16px;
}

.search-label {
  flex: 1 1 260px;
  max-width: 480px;
}

.search-label-text {
  display: block;
  font-size: 0.9rem;
  font-weight: 600;
  margin-bottom: 4px;
  color: #555;
}

.search-input {
  width: 100%;
  padding: 10px 14px;
  border-radius: 999px;
  border: 1px solid #d0d7e2;
  font-size: 1rem;
  outline: none;
}

.search-input:focus {
  border-color: #1E90FF;
  box-shadow: 0 0 0 2px rgba(30, 144, 255, 0.15);
}

.search-submit {
  padding: 10px 20px;
  border-radius: 999px;
  border: none;
  background-color: #1E90FF;
  color: #fff;
  font-weight: 600;
  font-size: 0.98rem;
  cursor: pointer;
  white-space: nowrap;
  transition: transform 0.05s ease-out, box-shadow 0.05s ease-out,
    background-color 0.1s ease-out;
}

.search-submit:hover {
  transform: translateY(-1px);
  box-shadow: 0 4px 10px rgba(0, 0, 0, 0.12);
}

.search-submit:active {
  transform: translateY(0);
  box-shadow: none;
}

.search-status {
  margin-top: 4px;
  margin-bottom: 16px;
  text-align: center;
  font-size: 0.95rem;
  color: #555;
}

.search-results {
  margin-top: 8px;
}

/* Make sure the search results grid behaves like the main posts grid */
.search-grid {
  margin-top: 8px;
}

/* Mobile tweaks */
@media (max-width: 600px) {
  .search-view {
    margin-top: 24px;
  }

  .search-form {
    flex-direction: column;
    align-items: stretch;
  }

  .search-label {
    max-width: none;
  }

  .search-submit {
    width: 100%;
    text-align: center;
  }
}
/* 2025-12-06 – Re-enable splash screen */
.oo-splash {
  position: fixed;
  inset: 0;
  display: flex !important; /* override earlier display:none */
  align-items: center;
  justify-content: center;
  background: #f4f6f8; /* soft light gray */
  z-index: 900;
  opacity: 1;
  visibility: visible;
}

.oo-splash-video {
  max-width: min(640px, 90vw);
  height: auto;
  border-radius: 20px;
  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.3);
}
/* 2025-12-06 — Fullscreen splash, centered, blocking */
.oo-splash {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;

  display: flex !important; /* override earlier display:none */
  align-items: center;
  justify-content: center;

  background: #ffffff; /* pure white so it looks like its own page */
  z-index: 9999; /* above everything */

  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}

.oo-splash-video {
  width: 90vw;
  max-width: 640px;
  height: auto;

  border-radius: 20px;
  box-shadow: 0 18px 45px rgba(0, 0, 0, 0.25);
}
/* Video embed layout for detail pages */
.detail-content.entry-content .video-embed-wrapper {
  position: relative;
  margin-bottom: 1.5rem;
}

/* Make the Vimeo (and other) players visible and responsive */
.detail-content.entry-content .video-embed-wrapper iframe {
  display: block;
  width: 100%;
  /* Maintain a standard 16:9 aspect ratio */
  aspect-ratio: 16 / 9;
  height: auto;
}
/* --- Fix Vimeo / video embeds on post detail --- */
.video-embed-wrapper {
  display: block;
  width: 100%;
  max-width: 100%;
  margin: 0 0 1.5rem;
  position: relative;
  overflow: visible; /* override any hidden value */
}

/* Make the actual player visible and responsive */
.video-embed-wrapper iframe,
.video-embed-wrapper .video-embed {
  display: block;
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 9; /* gives the element non-zero height */
}
/* --- Hard override: always show video players on post detail --- */

/* Wrapper should be visible and tall enough */
.detail-content.entry-content .video-embed-wrapper {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  margin: 0 0 1.5rem !important;
  position: relative !important;
  overflow: visible !important; /* defeat any hidden overflow */
  min-height: 220px !important; /* guarantee non-zero height */
}

/* Any iframe/video inside the detail content should render like a player */
.detail-content.entry-content iframe,
.detail-content.entry-content .video-embed-wrapper iframe,
.detail-content.entry-content .video-embed-wrapper .video-embed {
  display: block !important;
  width: 100% !important;
  max-width: 100% !important;
  height: auto !important;
  aspect-ratio: 16 / 9; /* gives a proper visible box */
}
/* --- HARD OVERRIDE: FORCE VIMEO/VIDEO PLAYERS TO DISPLAY --- */

.detail-content.entry-content .video-embed-wrapper {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    min-height: 300px !important; /* <- THIS FORCES VISIBILITY */
    overflow: visible !important;  /* defeat hidden overflow */
    position: relative !important;
}

/* Ensure the iframe fills the wrapper */
.detail-content.entry-content .video-embed-wrapper iframe {
    display: block !important;
    width: 100% !important;
    height: 100% !important;
    aspect-ratio: 16 / 9 !important;
    max-width: 100% !important;
}
/* === FINAL FORCE-FIX FOR VIMEO VISIBILITY === */

.detail-content.entry-content .video-embed-wrapper {
    display: block !important;
    width: 100% !important;
    min-height: 350px !important;
    height: auto !important;
    overflow: visible !important;
    position: relative !important;
    background: #f9f9f9; /* temporary visual indicator */
}

.detail-content.entry-content .video-embed-wrapper iframe {
    display: block !important;
    width: 100% !important;
    height: 100% !important;
    aspect-ratio: 16/9 !important;
    max-width: 100% !important;
}
/* Search page layout refinements — 2025-12-10 */
.search-view {
  max-width: 960px;
  margin: 0 auto;
  padding: 1rem;
}

.search-form {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 0.75rem;
  margin-bottom: 1rem;
}

.search-label {
  flex: 1 1 260px;
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
}

.search-label-text {
  font-size: 0.875rem;
  font-weight: 600;
}

.search-input {
  width: 100%;
  min-height: 40px;
  padding: 0.4rem 0.6rem;
  box-sizing: border-box;
}

/* Keep the button aligned with the input on the right */
.search-submit {
  flex: 0 0 auto;
  min-height: 40px;
  padding: 0.4rem 1rem;
  box-sizing: border-box;
  align-self: flex-end;
}
/* Prevent long URLs in card excerpts from bleeding across columns */
.post-card-excerpt,
.post-card-excerpt a {
  word-wrap: break-word;
  overflow-wrap: anywhere;
}
/* Search view layout + alignment ---------------------------------------- */

.search-view {
  max-width: 960px;
  margin: 0 auto;
  padding: 2rem 1rem 3rem;
}

.search-title {
  text-align: center;
  margin: 0 0 1.5rem;
}

/* Put input + button on one line on desktop/tablet */
.search-form {
  display: flex;
  align-items: flex-end;
  gap: 0.75rem;
  flex-wrap: wrap;
}

/* Label column grows, button stays compact */
.search-label {
  flex: 1 1 260px;
  display: flex;
  flex-direction: column;
}

.search-input {
  width: 100%;
}

/* Keep button aligned with input, but not stretched comically tall */
.search-submit {
  flex: 0 0 auto;
  padding: 0.6rem 1.8rem;
  border-radius: 999px;
  font-weight: 500;
}

/* Mobile: stack nicely with full-width button */
@media (max-width: 640px) {
  .search-form {
    flex-direction: column;
    align-items: stretch;
  }

  .search-submit {
    width: 100%;
  }
}
/* Mobile tightening for Search layout ----------------------------------- */
@media (max-width: 640px) {

  /* Reduce vertical spacing around search area */
  .search-view {
    padding-top: 1rem;
    padding-bottom: 2rem;
  }

  /* Stack but keep items close together */
  .search-form {
    flex-direction: column;
    align-items: stretch;
    gap: 0.4rem; /* was larger — tighten space between input + button */
  }

  /* Remove default label margin that pushes input downward */
  .search-label label {
    margin-bottom: 0.2rem;
  }

  /* Reduce extra margin under the input field */
  .search-input {
    margin-bottom: 0.2rem;
  }

  /* Button stays close to the input */
  .search-submit {
    width: 100%;
    margin-top: 0; /* eliminate any inherited spacing */
  }
}
/* 🟢 search mobile tight layout 2025-12-11R1 */
@media (max-width: 640px) {
  /* Keep the search area snug near the top */
  .search-view {
    padding-top: 0.75rem;
    padding-bottom: 1.5rem;
  }

  .search-title {
    margin-bottom: 0.75rem;
  }

  /* Stack input + button, but keep them very close together */
  .search-form {
    flex-direction: column;
    align-items: stretch;
    gap: 0.25rem;          /* tighter than previous 0.4rem+ */
    margin-bottom: 0.5rem; /* less bottom gap */
  }

  .search-label {
    flex: 1 1 auto;
    gap: 0.15rem;          /* pull label text + input closer */
  }

  .search-input {
    margin-bottom: 0;      /* remove extra space under input */
  }

  /* Full-width button directly under the input */
  .search-submit {
    width: 100%;
    align-self: stretch;
    margin-top: 0;         /* kill any inherited margin/top gap */
  }
}
/* 🔴 search mobile tight layout 2025-12-11R1 */
/* 🟢 search spinner 2025-12-11R1 */
.search-status {
  min-height: 2rem;           /* reserve a little vertical space */
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin-top: 0.75rem;
  font-size: 0.9rem;
  color: #333;
}

/* Hide spinner by default */
.search-status-spinner {
  width: 1.25rem;
  height: 1.25rem;
  border-radius: 999px;
  border: 2px solid rgba(30, 144, 255, 0.3);   /* light ring */
  border-top-color: #1E90FF;                   /* OkObserver blue */
  animation: oo-search-spin 0.8s linear infinite;
  opacity: 0;
  transform: scale(0.8);
}

/* Only show/animate spinner when .is-loading is applied */
.search-status.is-loading .search-status-spinner {
  opacity: 1;
  transform: scale(1);
}

/* If there is no text, center the spinner a bit */
.search-status-text:empty::before {
  content: '';
}

/* Spinner keyframes */
@keyframes oo-search-spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}
/* 🔴 search spinner 2025-12-11R1 */
/* --- Search Spinner (2025-12-11) --- */
.search-status {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 1rem 0;
}

.search-status-spinner {
  width: 16px;
  height: 16px;
  border: 3px solid rgba(30, 144, 255, 0.2);
  border-top-color: #1E90FF;
  border-radius: 50%;
  animation: oo-spin 0.6s linear infinite;
  display: none;
}

.search-status.is-loading .search-status-spinner {
  display: inline-block;
}

@keyframes oo-spin {
  from { transform: rotate(0deg); }
  to { transform: rotate(360deg); }
}

.search-status-text {
  font-size: 0.9rem;
}
/* ============================================================
   OkObserver Login / Logout UI
   Added: 2025-12-16
   Purpose: Centered, branded login form (desktop + mobile)
   ============================================================ */

.login-wrap {
  min-height: calc(100vh - 140px);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px 16px 40px;
  background: #f3f5f7;
}

.login-card {
  width: min(440px, 100%);
  background: #ffffff;
  border-radius: 16px;
  box-shadow: 0 10px 30px rgba(0,0,0,0.12);
  padding: 22px 20px;
}

.login-title {
  margin: 0 0 6px;
  font-size: 24px;
  color: #111111;
}

.login-sub {
  margin: 0 0 18px;
  color: #4b5563;
  font-size: 14px;
  line-height: 1.4;
}

.login-form {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.login-row label {
  display: block;
  font-size: 12px;
  color: #374151;
  margin: 0 0 6px;
  font-weight: 700;
  letter-spacing: 0.02em;
}

.login-row input {
  width: 100%;
  padding: 12px;
  border: 1px solid #d1d5db;
  border-radius: 12px;
  font-size: 16px;
  background: #ffffff;
  outline: none;
}

.login-row input:focus {
  border-color: #1E90FF;
  box-shadow: 0 0 0 3px rgba(30,144,255,0.25);
}

.login-actions {
  display: flex;
  gap: 10px;
  margin-top: 14px;
}

.btnPrimary,
.btnSecondary {
  appearance: none;
  border: none;
  border-radius: 12px;
  padding: 12px 14px;
  font-size: 15px;
  font-weight: 800;
  cursor: pointer;
  flex: 1;
}

.btnPrimary {
  background: #1E90FF;
  color: #ffffff;
}

.btnPrimary:hover {
  filter: brightness(0.95);
}

.btnSecondary {
  background: #eef2f7;
  color: #111111;
}

.btnSecondary:hover {
  filter: brightness(0.98);
}

.login-error {
  margin-top: 10px;
  background: #fff1f2;
  border: 1px solid #fecdd3;
  color: #9f1239;
  padding: 10px 12px;
  border-radius: 12px;
  font-size: 13px;
}

.login-note {
  margin-top: 14px;
  font-size: 12px;
  color: #6b7280;
}

/* Mobile refinements */
@media (max-width: 420px) {
  .login-card {
    padding: 18px 16px;
  }
  .login-title {
    font-size: 22px;
  }
  .btnPrimary,
  .btnSecondary {
    padding: 12px;
  }
}
/* 🟢 override.css append — Login UI (OkObserver style) — START
   Safe, append-only. No JS assumptions.
*/

/* Page-level centering for login route */
.oo-login-page,
.login-page,
#login,
[data-route="login"] {
  min-height: calc(100vh - 120px); /* account for header */
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px 16px 48px;
}

/* Login card */
.oo-login-card,
.login-card,
form.login-form {
  width: 100%;
  max-width: 420px;
  background: #fff;
  border-radius: 16px;
  box-shadow: 0 12px 32px rgba(0,0,0,.18);
  padding: 24px 22px 26px;
}

/* Heading */
.oo-login-card h1,
.login-card h1,
.login-form h1 {
  margin: 0 0 6px;
  font-size: 1.35rem;
  text-align: center;
  color: #1E90FF;
}

.oo-login-subtitle,
.login-subtitle {
  text-align: center;
  font-size: .9rem;
  color: #667085;
  margin-bottom: 18px;
}

/* Form layout */
.login-form,
.oo-login-form {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

/* Labels */
.login-form label,
.oo-login-form label {
  font-size: .85rem;
  font-weight: 600;
  color: #344054;
}

/* Inputs */
.login-form input[type="text"],
.login-form input[type="username"],
.login-form input[type="email"],
.login-form input[type="password"],
.oo-login-form input {
  width: 100%;
  padding: 12px 14px;
  border-radius: 10px;
  border: 1px solid #d0d5dd;
  font-size: .95rem;
  outline: none;
  transition: border-color .15s ease, box-shadow .15s ease;
}

.login-form input:focus,
.oo-login-form input:focus {
  border-color: #1E90FF;
  box-shadow: 0 0 0 3px rgba(30,144,255,.18);
}

/* Submit button */
.login-form button[type="submit"],
.oo-login-submit {
  margin-top: 6px;
  appearance: none;
  border: 0;
  border-radius: 12px;
  background: #1E90FF;
  color: #fff;
  font-size: .95rem;
  font-weight: 600;
  padding: 12px 16px;
  cursor: pointer;
  box-shadow: 0 6px 18px rgba(30,144,255,.35);
  transition: transform .12s ease, box-shadow .12s ease, filter .12s ease;
}

.login-form button[type="submit"]:hover,
.oo-login-submit:hover {
  filter: brightness(1.05);
  transform: translateY(-1px);
}

.login-form button[type="submit"]:active,
.oo-login-submit:active {
  transform: translateY(0);
  box-shadow: 0 4px 12px rgba(30,144,255,.28);
}

/* Error message */
.login-error,
.oo-login-error {
  margin-top: 10px;
  background: #fdecea;
  color: #b42318;
  border: 1px solid #f5c2c7;
  border-radius: 10px;
  padding: 10px 12px;
  font-size: .85rem;
  text-align: center;
}

/* Logged-in note (optional) */
.login-success,
.oo-login-success {
  margin-top: 10px;
  background: #e8f3ff;
  color: #0b63ce;
  border: 1px solid #cfe4ff;
  border-radius: 10px;
  padding: 10px 12px;
  font-size: .85rem;
  text-align: center;
}

/* Mobile tightening */
@media (max-width: 480px) {
  .oo-login-card,
  .login-card,
  form.login-form {
    padding: 20px 16px 22px;
    border-radius: 14px;
  }
}

/* 🔴 override.css append — Login UI (OkObserver style) — END */
/* Hide login error box when empty */
.login-error:empty {
  display: none;
}
/* Login card refinement */
.login-card {
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
  border-radius: 14px;
}

.login-card h2 {
  margin-bottom: 1rem;
  font-weight: 600;
}

.login-card button[type="submit"] {
  font-size: 1rem;
  font-weight: 600;
  letter-spacing: 0.3px;
}
/* Logout confirmation styling */
.logout-container {
  max-width: 420px;
  margin: 4rem auto;
  padding: 2rem;
  background: #ffffff;
  border-radius: 14px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08);
  text-align: center;
}

.logout-container h2 {
  margin-bottom: 0.5rem;
}

.logout-actions {
  display: flex;
  justify-content: center;
  gap: 1rem;
  margin-top: 1.5rem;
}
/* =====================================================================
   Login / Logout pages (OkObserver-ish)
   NOTE: The error/success boxes are hidden when empty.
   ===================================================================== */

.login-wrap{
  max-width:460px;
  margin:48px auto 24px;
  padding:24px 22px;
  background:#fff;
  border-radius:16px;
  box-shadow:0 12px 32px rgba(0,0,0,.12);
}

@media (max-width:520px){
  .login-wrap{margin:24px 12px 18px; padding:20px 16px;}
}

.login-title{
  margin:0 0 14px;
  font-size:30px;
  font-weight:800;
  letter-spacing:.2px;
}

.login-field{margin:12px 0}
.login-field label{
  display:block;
  font-size:13px;
  font-weight:700;
  margin:0 0 6px;
  opacity:.9;
}
.login-field input{
  width:100%;
  padding:12px 12px;
  border:1px solid rgba(30,144,255,.25);
  border-radius:12px;
  font-size:15px;
  outline:none;
  transition:box-shadow .15s ease, border-color .15s ease;
}
.login-field input:focus{
  border-color:rgba(30,144,255,.55);
  box-shadow:0 0 0 4px rgba(30,144,255,.15);
}

.login-actions{
  display:flex;
  gap:12px;
  margin-top:14px;
  align-items:center;
}
@media (max-width:520px){
  .login-actions{flex-direction:column; align-items:stretch;}
}

.btnPrimary, .btnSecondary{
  border:0;
  border-radius:12px;
  padding:12px 14px;
  font-size:15px;
  font-weight:800;
  cursor:pointer;
  transition:transform .05s ease, filter .12s ease;
}
.btnPrimary:active, .btnSecondary:active{transform:translateY(1px)}
.btnPrimary{background:var(--oko-blue); color:#fff; box-shadow:0 10px 18px rgba(30,144,255,.22)}
.btnPrimary:hover{filter:brightness(1.03)}
.btnSecondary{background:#eef5ff; color:#0b2a4a}
.btnSecondary:hover{filter:brightness(1.02)}
@media (max-width:520px){
  .btnPrimary, .btnSecondary{width:100%}
}

/* Hide message boxes when empty (fixes “red banner with no error”). */
.login-error, .login-msg{
  margin-top:12px;
  padding:10px 12px;
  border-radius:12px;
  font-size:14px;
  line-height:1.35;
  display:none;
}
.login-error:not(:empty){
  display:block;
  background:#ffe9e9;
  border:1px solid #f2b4b4;
  color:#7a1b1b;
}
.login-msg:not(:empty){
  display:block;
  background:#e9fff1;
  border:1px solid #a6e7bf;
  color:#145b2e;
}

/* Logout note */
.logout-note{
  margin:10px 0 0;
  font-size:14px;
  opacity:.85;
}

/* 🔴 override.css */
/* ================================
   Logout screen polish
   ================================ */

.logout-wrap {
  max-width: 420px;
  margin: 6rem auto;
  padding: 2.5rem 2rem;
  background: #fff;
  border-radius: 16px;
  box-shadow: 0 12px 30px rgba(0, 0, 0, 0.12);
  text-align: center;
}

.logout-wrap h2 {
  font-size: 1.8rem;
  margin-bottom: 0.75rem;
  line-height: 1.2;
}

.logout-wrap p {
  font-size: 1rem;
  color: #444;
  margin-bottom: 2rem;
}

.logout-actions {
  display: flex;
  justify-content: center;
  gap: 1rem;
}

.logout-actions button {
  min-width: 110px;
  padding: 0.65rem 1.2rem;
  font-size: 0.95rem;
  border-radius: 10px;
}

.logout-actions .btn-logout {
  background: #1E90FF;
  color: #fff;
}

.logout-actions .btn-cancel {
  background: #f1f3f5;
  color: #333;
}

@media (max-width: 600px) {
  .logout-wrap {
    margin: 3rem 1rem;
    padding: 2rem 1.5rem;
  }

  .logout-actions {
    flex-direction: column;
  }
}
/* 🟢 override.css — Login UI polish for .login-view (2025-12-17) START */
/* Paste at END of override.css */

.login-view{
  max-width:460px;
  margin:48px auto 24px;
  padding:24px 22px;
  background:#fff;
  border-radius:16px;
  box-shadow:0 12px 32px rgba(0,0,0,.12);
}

@media (max-width:520px){
  .login-view{margin:24px 12px 18px; padding:20px 16px;}
}

.login-title{
  margin:0 0 14px;
  font-size:30px;
  font-weight:800;
  letter-spacing:.2px;
  text-align:center;
  color:var(--oko-blue);
}

.login-form{display:flex; flex-direction:column; gap:12px}

.login-label-text{
  display:block;
  font-size:13px;
  font-weight:700;
  margin:0 0 6px;
  opacity:.9;
}

.login-input{
  width:100%;
  padding:12px 12px;
  border:1px solid rgba(30,144,255,.25);
  border-radius:12px;
  font-size:15px;
  outline:none;
  transition:box-shadow .15s ease, border-color .15s ease;
}

.login-input:focus{
  border-color:rgba(30,144,255,.55);
  box-shadow:0 0 0 4px rgba(30,144,255,.15);
}

.login-submit{
  border:0;
  border-radius:12px;
  padding:12px 14px;
  font-size:15px;
  font-weight:800;
  cursor:pointer;
  background:var(--oko-blue);
  color:#fff;
  box-shadow:0 10px 18px rgba(30,144,255,.22);
}

.login-submit:active{transform:translateY(1px)}

/* Keep your “no red banner unless there’s text” behavior */
.login-error{display:none;}
.login-error:not(:empty){display:block;}
/* 🟢 override.css — Login UI polish for .login-view (2025-12-17) END */
/* Hamburger auth visibility polish */
body.oo-logged-in #ooSignInLink {
  display: none !important;
}

body:not(.oo-logged-in) #ooSignOutLink {
  display: none !important;
}
diff --git a/override.css b/override.css
--- a/override.css
+++ b/override.css
@@
+/* 🟢 override.css — Auth UI polish (2025-12-18) START
+   Append-only. CSS-only. No route/JS assumptions.
+   🔴 override.css */
+
+/* ----------------------------- */
+/* Login: small refinements      */
+/* ----------------------------- */
+.login-view{
+  border: 1px solid rgba(15, 23, 42, 0.08);
+}
+
+.login-view .login-submit:focus-visible,
+.login-view .login-input:focus-visible{
+  outline: 2px solid rgba(30,144,255,.55);
+  outline-offset: 2px;
+}
+
+.login-view .login-submit{
+  width: 100%;
+}
+
+/* Keep error collapsed unless populated (reinforce) */
+.login-view .login-error{ display:none; }
+.login-view .login-error:not(:empty){ display:block; }
+
+/* ----------------------------- */
+/* Logout: make it match login   */
+/* ----------------------------- */
+.logout-wrap{
+  max-width: 460px;
+  margin: 48px auto 24px;
+  padding: 24px 22px;
+  background: #fff;
+  border-radius: 16px;
+  border: 1px solid rgba(15, 23, 42, 0.08);
+  box-shadow: 0 12px 32px rgba(0,0,0,.12);
+  text-align: center;
+}
+
+@media (max-width:520px){
+  .logout-wrap{ margin: 24px 12px 18px; padding: 20px 16px; }
+}
+
+.logout-wrap h1{
+  margin: 0 0 10px;
+  font-size: 28px;
+  font-weight: 800;
+  letter-spacing: .2px;
+  color: var(--oko-blue, #1E90FF);
+}
+
+.logout-wrap p{
+  margin: 0 0 16px;
+  color: #475467;
+}
+
+.logout-actions{
+  display: flex;
+  gap: 10px;
+  margin-top: 14px;
+}
+
+.logout-actions .btnPrimary,
+.logout-actions .btnSecondary{
+  flex: 1;
+}
+
+@media (max-width:420px){
+  .logout-actions{ flex-direction: column; }
+}
+
+#logoutMsg.login-msg{
+  margin-top: 12px;
+  font-size: 13px;
+  color: #667085;
+}
+
+/* ----------------------------- */
+/* Menu: auth clarity + polish   */
+/* ----------------------------- */
+.oo-menu-list .menuLink{
+  font-weight: 800;
+}
+
+/* Ensure only the relevant auth link is visible (works with existing body.oo-logged-in toggle) */
+body.oo-logged-in #ooSignInLink{ display:none !important; }
+body:not(.oo-logged-in) #ooSignOutLink{ display:none !important; }
+
+/* 🟢 override.css — Auth UI polish (2025-12-18) END
+   🔴 override.css */
/* 🟢 override.css — Auth UI polish (2025-12-18) START
   Append-only. CSS-only.
   🔴 override.css */

/* ----------------------------- */
/* Login: small refinements      */
/* ----------------------------- */
.login-view{
  border: 1px solid rgba(15, 23, 42, 0.08);
}

.login-view .login-submit:focus-visible,
.login-view .login-input:focus-visible{
  outline: 2px solid rgba(30,144,255,.55);
  outline-offset: 2px;
}

.login-view .login-submit{
  width: 100%;
}

/* Keep error collapsed unless populated */
.login-view .login-error{ display:none; }
.login-view .login-error:not(:empty){ display:block; }

/* ----------------------------- */
/* Logout: make it match login   */
/* ----------------------------- */
.logout-wrap{
  max-width: 460px;
  margin: 48px auto 24px;
  padding: 24px 22px;
  background: #fff;
  border-radius: 16px;
  border: 1px solid rgba(15, 23, 42, 0.08);
  box-shadow: 0 12px 32px rgba(0,0,0,.12);
  text-align: center;
}

@media (max-width:520px){
  .logout-wrap{ margin: 24px 12px 18px; padding: 20px 16px; }
}

.logout-wrap h1{
  margin: 0 0 10px;
  font-size: 28px;
  font-weight: 800;
  letter-spacing: .2px;
  color: var(--oko-blue, #1E90FF);
}

.logout-wrap p{
  margin: 0 0 16px;
  color: #475467;
}

.logout-actions{
  display: flex;
  gap: 10px;
  margin-top: 14px;
}

.logout-actions .btnPrimary,
.logout-actions .btnSecondary{
  flex: 1;
}

@media (max-width:420px){
  .logout-actions{ flex-direction: column; }
}

#logoutMsg.login-msg{
  margin-top: 12px;
  font-size: 13px;
  color: #667085;
}

/* ----------------------------- */
/* Menu: auth clarity + polish   */
/* ----------------------------- */
.oo-menu-list .menuLink{
  font-weight: 800;
}

/* Hide the entire LI row (not just the link) so no empty row/dividers remain */
body.oo-logged-in .oo-menu-list li:has(#ooSignInLink){ display:none !important; }
body:not(.oo-logged-in) .oo-menu-list li:has(#ooSignOutLink){ display:none !important; }

/* Remove the “auth divider” styling so we don’t get extra horizontal lines */
body.oo-logged-in .oo-menu-list li:has(#ooSignOutLink),
body:not(.oo-logged-in) .oo-menu-list li:has(#ooSignInLink){
  margin-top: 0 !important;
  padding-top: 0 !important;
  border-top: 0 !important;
}
/* 🟢 override.css — Auth UI polish (2025-12-18) END
   🔴 override.css */
/* 🟢 override.css — Hamburger menu polish (2025-12-18) START */
/* Append-only. CSS-only. Targets existing .oo-menu / .oo-overlay / .oo-menu-list */

/* Overlay: subtle dim + click safety */
.oo-overlay[hidden]{ display:none !important; }
.oo-overlay{
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,.28);
  z-index: 1090;
}

/* Menu panel */
.oo-menu{
  position: fixed;
  top: 64px;
  right: 14px;
  width: min(320px, calc(100vw - 28px));
  background: rgba(255,255,255,.98);
  border: 1px solid rgba(15, 23, 42, 0.10);
  border-radius: 16px;
  box-shadow: 0 18px 48px rgba(0,0,0,.22);
  padding: 10px;
  z-index: 1100;
  transform: translateY(-6px);
  opacity: 0;
  pointer-events: none;
  transition: opacity .14s ease, transform .14s ease;
}

/* Show when body has is-menu-open (set by your header script) */
body.is-menu-open .oo-menu{
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}

@media (max-width: 520px){
  .oo-menu{
    right: 10px;
    top: 60px;
    width: min(360px, calc(100vw - 20px));
  }
}

/* List reset + nicer spacing */
.oo-menu-list{
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 6px;
}

/* Links: big tap targets, clear focus */
.oo-menu-list a{
  display: block;
  padding: 12px 12px;
  border-radius: 12px;
  text-decoration: none;
  color: #0a1f44;
  font-weight: 700;
  line-height: 1.15;
}

.oo-menu-list a:hover{
  background: rgba(30,144,255,.10);
}

.oo-menu-list a:focus-visible{
  outline: 2px solid rgba(30,144,255,.65);
  outline-offset: 2px;
  background: rgba(30,144,255,.12);
}

/* Auth links: subtle emphasis already present via .menuLink; add a divider for clarity */
.oo-menu-list li:has(#ooSignInLink),
.oo-menu-list li:has(#ooSignOutLink){
  margin-top: 6px;
  padding-top: 8px;
  border-top: 1px solid rgba(15, 23, 42, 0.10);
}
/* Fix double divider: prevent stacking with last-child divider */
.oo-menu-list li:has(#ooSignOutLink),
.oo-menu-list li:has(#ooSignInLink){
  border-bottom: 0 !important;
}
/* Keep the hamburger button “pressed” feel when open */
body.is-menu-open .oo-hamburger{
  filter: brightness(0.98);
  background: rgba(255,255,255,.16);
  border-radius: 12px;
}

/* 🟢 override.css — Hamburger menu polish (2025-12-18) END */
/* 🟢 override.css — :has() fallback for auth divider (2025-12-18) START */
/* Append-only. CSS-only. */

.oo-menu-list li:last-child {
  margin-top: 6px;
  padding-top: 8px;
  border-top: 1px solid rgba(15, 23, 42, 0.10);
}

/* 🟢 override.css — :has() fallback for auth divider (2025-12-18) END */
/* 🟢 override.css — Hamburger click fix (overlay stacking) START */
/* Append-only. CSS-only. */

.oo-overlay{
  pointer-events: auto;
}

body.is-menu-open .oo-menu{
  pointer-events: auto;
}

body.is-menu-open .oo-overlay{
  pointer-events: auto;
}

.oo-menu{
  position: fixed;
  z-index: 1200; /* ensure above overlay */
}

.oo-overlay{
  z-index: 1100;
}

/* 🟢 override.css — Hamburger click fix (overlay stacking) END */
/* 🟢 override.css — Hamburger overlay header fix (2025-12-18) START */
/* Append-only. CSS-only. */

.oo-overlay{
  top: 64px;          /* do NOT cover header */
  height: calc(100vh - 64px);
}

body.is-menu-open .oo-hamburger{
  pointer-events: auto;
  position: relative;
  z-index: 1300;      /* ensure clickable above overlay */
}

/* 🟢 override.css — Hamburger overlay header fix (2025-12-18) END */
/* 🟢 override.css — Hamburger pointer-events fix (2025-12-18) START */
/* Append-only. CSS-only. */

/* Overlay should never block menu interaction */
.oo-overlay{
  pointer-events: none !important;
}

/* Menu must explicitly receive pointer events */
.oo-menu,
.oo-menu *{
  pointer-events: auto !important;
}

/* Ensure menu is topmost interactive layer */
.oo-menu{
  position: fixed;
  z-index: 2000;
}

/* 🟢 override.css — Hamburger pointer-events fix (2025-12-18) END */
/* --- FIX: Hamburger menu not clickable / blurred overlay --- */

/* Ensure menu panel sits above any backdrop or overlay */
.oo-menu,
.oo-menu-panel,
.hamburger-menu,
.nav-menu {
  z-index: 10000;
  pointer-events: auto;
}

/* Kill pointer-blocking overlays when menu is open */
body.menu-open::before,
body.menu-open::after {
  pointer-events: none;
}

/* If a backdrop blur is used, it must NOT intercept clicks */
.oo-menu-backdrop,
.menu-backdrop,
.nav-backdrop {
  pointer-events: none;
}

/* Explicitly allow clicking menu links */
.oo-menu a,
.oo-menu button,
.nav-menu a,
.nav-menu button {
  pointer-events: auto;
  cursor: pointer;
}

/* Remove accidental blur on menu text itself */
.oo-menu,
.nav-menu {
  filter: none;
  backdrop-filter: none;
}
/* --- POLISH: Remove blur / haze from open hamburger menu --- */

/* Force menu panel to be fully crisp */
.oo-menu,
.oo-menu-panel,
.nav-menu,
.hamburger-menu {
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  filter: none !important;
  opacity: 1 !important;
}

/* Ensure menu text is rendered sharply */
.oo-menu *,
.nav-menu * {
  filter: none !important;
  text-shadow: none !important;
}

/* Optional: slightly solidify menu background for clarity */
.oo-menu,
.nav-menu {
  background-color: rgba(255, 255, 255, 0.98);
}
/* 🟢 override.css — Hamburger crisp text hotfix (2025-12-18) START */
/* Append-only. CSS-only. */

/* Force the actual menu panel to render without transform/blur */
body.is-menu-open .oo-menu,
body.is-menu-open [data-oo="menu"]{
  transform: none !important;
  animation: none !important;
  filter: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  opacity: 1 !important;
  background: #ffffff !important;
}

/* Ensure menu items inherit no blur */
body.is-menu-open .oo-menu *,
body.is-menu-open [data-oo="menu"] *{
  filter: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  opacity: 1 !important;
}

/* 🟢 override.css — Hamburger crisp text hotfix (2025-12-18) END */
/* 🟢 override.css — FINAL hamburger blur fix (GPU text rendering) */
/* Append-only. No layout changes. */

/* Remove GPU transform inheritance that causes Chrome text blur */
.oo-menu,
.oo-menu * {
  transform: none !important;
  will-change: auto !important;
}

/* Force crisp text rendering on Windows/Chrome */
.oo-menu {
  backface-visibility: visible !important;
  -webkit-font-smoothing: antialiased;
  text-rendering: geometricPrecision;
}

/* Ensure parent header transforms do NOT affect menu */
header,
.site-header,
.header-inner {
  transform-style: flat !important;
}
/* 🟢 override.css — menu blur fix: disable transform-based animation */

/* Kill GPU-transform animation on the dropdown (fixes hazy text) */
.oo-menu {
  will-change: auto !important;
  transform: none !important;
  animation: none !important;
  transition: opacity 120ms ease !important;
}

/* Open state: still visible/clickable, but no translateY */
.is-menu-open .oo-menu {
  transform: none !important;
  animation: none !important;
}

/* Also stop the hamburger active-scale (can blur the icon) */
.oo-hamburger:active {
  transform: none !important;
}
/* 🟢 override.css — hamburger menu crispness fix (append-only) */

/* 1) Stop GPU/composited transforms from softening text */
.oo-menu{
  will-change: auto !important;
}
.is-menu-open .oo-menu{
  transform: none !important;
  animation: none !important;
}

/* 2) Ensure nothing is applying blur/filters */
.oo-menu,
.oo-menu *{
  filter: none !important;
  -webkit-filter: none !important;
  backdrop-filter: none !important;
}

/* 3) Fix invalid rgba() values (alpha must be 0–1) */
.oo-menu{
  box-shadow: 0 12px 24px rgba(0,0,0,0.14) !important;
}
.oo-overlay{
  background: rgba(0,0,0,0.25) !important;
}

/* 🔴 override.css — hamburger menu crispness fix */
/* 🟢 override.css — FINAL menu blur fix (background blur removal) */

/* When menu is open, DO NOT blur or fade the page content */
body.is-menu-open,
body.is-menu-open main,
body.is-menu-open #app {
  filter: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  opacity: 1 !important;
}

/* Ensure overlay does not blur via filter */
.oo-overlay {
  filter: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}

/* Keep dimming via color only (no blur) */
.oo-overlay {
  background: rgba(0, 0, 0, 0.25) !important;
}

/* 🔴 override.css — FINAL menu blur fix */
/* 🟢 override.css — menu blur hotfix (append-only)
   Removes overlay blur/haze + guarantees menu is above overlay */
.oo-overlay, [data-oo="overlay"]{
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  background: rgba(0,0,0,.25) !important; /* valid alpha */
}

.oo-menu, [data-oo="menu"]{
  z-index: 2000 !important; /* ensure above overlay */
}

/* 🔴 override.css — menu blur hotfix (append-only) */
/* ================================
   Clickable hero cursor (grid)
   ================================ */
#app .posts-grid .post-card .thumb,
#app .posts-grid .post-card .thumb img {
  cursor: pointer;
}
/* ================================
   Post summary cards are clickable
   ================================ */
#app .posts-grid .post-card,
#app .posts-grid .post-card * {
  cursor: pointer;
}
/* =========================
   Login: password eye toggle
   ========================= */
.login-password-wrap{
  position: relative;
  display: block;
}
.login-password-wrap .login-input{
  padding-right: 44px; /* room for the eye button */
}
.login-password-toggle{
  position: absolute;
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
  border: 0;
  background: transparent;
  padding: 6px;
  line-height: 1;
  cursor: pointer;
  font-size: 16px;
  opacity: 0.85;
}
.login-password-toggle:hover{
  opacity: 1;
}
/* --- 2025-12-18 menu + clickable-hero polish (append at END of override.css) --- */

/* Make clickable hero/featured image feel clickable */
.posts-grid .post-card-image-wrapper,
.posts-grid .post-card-image-wrapper img {
  cursor: pointer;
}

/* Mobile “blurry/out of focus” hamburger/menu: ensure overlay never sits above menu, and kill blur filters */
body.is-menu-open .oo-overlay,
body.is-menu-open [data-oo="overlay"]{
  -webkit-backdrop-filter: none !important;
  backdrop-filter: none !important;
  filter: none !important;
  z-index: 900 !important;
}

body.is-menu-open nav#oo-menu.oo-menu{
  z-index: 3000 !important;
}

body.is-menu-open nav#oo-menu.oo-menu,
body.is-menu-open nav#oo-menu.oo-menu *{
  filter: none !important;
}
/* ---------------------------------- */
/* OkObserver — Menu + Cursor polish   */
/* (append at END of override.css)     */
/* ---------------------------------- */

/* Fix extra “mystery divider lines” caused by empty <li> rows */
.oo-menu-list li:empty{
  display:none !important;
}

/* If your menu uses borders on LI rows, ensure first visible row has no top border */
.oo-menu-list li:first-child{
  border-top:0 !important;
}

/* Make it visually obvious the post-card (and hero) is clickable */
.post-card{
  cursor:pointer;
}
.post-card .post-card-image-wrapper,
.post-card .post-card-image-wrapper img{
  cursor:pointer;
}

/* Optional: detail hero feels clickable (for zoom/open) */
.post-detail .post-hero img.oo-media{
  cursor:zoom-in;
}
/* Detail hero image should feel clickable */
.post-hero .oo-media-link { display: block; }
.post-hero .oo-media-link, 
.post-hero .oo-media { cursor: pointer; }
/* ================================
   OO OVERRIDES — 2025-12-18
   Cursor affordance for clickable hero
   ================================ */

/* Make it obvious the hero image area is clickable */
.post-card .post-card-image-wrapper,
.post-card .post-card-image-wrapper img.post-card-image,
.post-card img.post-card-image {
  cursor: pointer !important;
}
/* Detail hero is clickable */
.post-hero-link,
.post-hero-link img.oo-media {
  cursor: pointer !important;
}
.post-hero-link { 
  display: block;
  position: relative;
}/* --- FIX: prevent sticky header from covering post tags --- */
.post-detail .post-tax {
  margin-top: 1rem;
  padding-top: 0.25rem;
}

/* Ensure tags are not overlapped by sticky header */
.post-detail {
  scroll-margin-top: 96px; /* matches header height */
}
/* === Post detail tag chips (scoped, safe) === */
.post-detail .post-tax {
  margin: 14px 0 0;
}

.post-detail .post-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
}

.post-detail .post-tag {
  display: inline-block;
  padding: 6px 10px;
  border-radius: 9999px;
  font-size: 13px;
  line-height: 1;
  border: 1px solid rgba(30, 144, 255, 0.35);
  background: rgba(30, 144, 255, 0.10);
  color: #0b2a4a;
  white-space: nowrap;
}

.post-detail .post-tag-empty {
  opacity: 0.7;
}
/* --- FIX: prevent zoom/magnifier cursor on post detail hero image --- */
.post-detail img,
.post-detail .post-hero img,
.post-detail .featured-image img {
  cursor: default !important;
}
/* --- Stabilize mobile hamburger icon (prevent vertical jump) --- */
button.oo-hamburger {
  width: 44px;              /* fixed tap target */
  height: 44px;             /* FIXED HEIGHT = no jump */
  padding: 0;               /* remove baseline-sensitive padding */
  display: flex;
  align-items: center;
  justify-content: center;
  line-height: 1;           /* decouple glyph baseline */
}

/* Prevent focus/active state from shifting layout */
button.oo-hamburger:focus,
button.oo-hamburger:active {
  outline: none;
}
/* Active state must NOT override centering transform */
.oo-hamburger:active {
  transform: inherit !important;
}
/* 🟢 OkObserver — FIX mobile hamburger jump (append-only, safe)
   Reason: :active transform was overriding translateY(-50%)
*/
.oo-hamburger:active {
  transform: translateY(-50%) !important; /* preserve centering */
  opacity: 0.85;                          /* visual feedback without layout shift */
}
/* 🟢 OkObserver — MOBILE hamburger centering lock
   Prevent :active state from breaking vertical centering on mobile only */
@media (max-width: 768px) {
  .oo-hamburger:active {
    transform: translateY(-50%) !important;
  }
}
/* 🟢 OkObserver — DESKTOP hamburger jump fix (append-only)
   Desktop must NOT inherit/translateY on :active (causes vertical jump). */
@media (min-width: 769px) {
  .oo-header .oo-hamburger:active,
  .oo-header [data-oo="hamburger"]:active,
  .oo-hamburger:active,
  [data-oo="hamburger"]:active {
    transform: none !important;
  }
}
/* ===============================
   Mobile header height reduction
   =============================== */
@media (max-width: 600px) {

  header {
    padding-top: 6px;
    padding-bottom: 6px;
  }

  header .logo {
    max-height: 44px; /* was visually ~56px */
  }

  header .motto {
    margin-top: 2px;
    line-height: 1.1;
    font-size: 0.75rem;
  }

}
/* =========================================
   Mobile header height + hamburger sizing
   ========================================= */
@media (max-width: 600px) {

  /* Reduce overall header height */
  header {
    padding-top: 6px;
    padding-bottom: 6px;
  }

  /* Slightly shrink logo to match tighter header */
  header .logo {
    max-height: 44px;
  }

  /* Tighten motto spacing */
  header .motto {
    margin-top: 2px;
    line-height: 1.1;
    font-size: 0.75rem;
  }

  /* Enlarge hamburger tap target */
  .hamburger {
    padding: 10px;          /* increases clickable area */
  }

  .hamburger span {
    width: 26px;            /* was ~20–22px */
    height: 3px;
    margin: 5px 0;
  }

}
/* =========================================
   Mobile header padding + hamburger size
   ========================================= */
@media (max-width: 600px) {

  /* Reduce top/bottom padding of header */
  header {
    padding-top: 6px;
    padding-bottom: 6px;
  }

  /* Make hamburger icon larger */
  .hamburger {
    padding: 10px;   /* bigger tap target */
  }

  .hamburger span {
    width: 28px;     /* wider bars */
    height: 3px;     /* thicker bars */
    margin: 6px 0;   /* more spacing between bars */
  }

}
/* =========================================
   Mobile header: ultra-compact height
   ========================================= */
@media (max-width: 600px) {

  /* Collapse header vertical padding hard */
  header {
    padding-top: 2px;
    padding-bottom: 2px;
  }

  /* Prevent logo from forcing height */
  header .logo {
    max-height: 36px;
  }

  /* Motto should not add vertical bulk */
  header .motto {
    margin-top: 0;
    margin-bottom: 0;
    line-height: 1.0;
    font-size: 0.7rem;
  }

  /* Keep hamburger easy to tap despite tight header */
  .hamburger {
    padding: 10px; /* tap target stays large */
  }

  .hamburger span {
    width: 30px;
    height: 3px;
    margin: 6px 0;
  }

}
/* =========================================
   About page: ultra-tight horizontal padding
   ========================================= */

/* About page only */
.about-view,
.about-content,
.about-column {
  padding-left: 4px;
  padding-right: 4px;
}

/* Keep it consistent on mobile */
@media (max-width: 600px) {
  .about-view,
  .about-content,
  .about-column {
    padding-left: 4px;
    padding-right: 4px;
  }
}
/* --- mobile-header-tighten + bigger-hamburger (2026-01-07) --- */
@media (max-width: 768px) {
  .site-header {
    padding: 2px 0 2px 0 !important; /* tighter top/bottom */
  }

  .header-logo {
    height: 56px !important; /* smaller logo to reclaim vertical space */
  }

  .motto {
    margin-top: 2px !important;
    font-size: 0.9rem !important;
    line-height: 1.1 !important;
  }

  .menu-toggle {
    font-size: 40px !important;   /* bigger hamburger */
    top: 6px !important;          /* re-center after padding shrink */
    right: 12px !important;
  }
}
/* --- about-card-padding-4px (2026-01-07) --- */
.about-card {
  padding: 4px !important;
}
/* Ensure FB overlay can anchor when hero is an <a> */
.post-detail .post-hero-link {
  position: relative;
  display: block;
}
@media (max-width: 600px) {
  /* Collapse header vertical padding hard (make selectors + priority stronger) */
  header,
  .oo-header,
  .site-header,
  .okobs-header,
  .app-header {
    padding-top: 2px !important;
    padding-bottom: 2px !important;
    min-height: 0 !important;
  }

  /* Prevent logo area from forcing height */
  header .logo,
  header .oo-logo,
  .oo-header .logo,
  .oo-header .oo-logo,
  .site-header .logo,
  .site-header .oo-logo {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
  }

  header .logo img,
  header .oo-logo img,
  .oo-header .logo img,
  .oo-header .oo-logo img {
    max-height: 32px !important;
    height: auto !important;
  }

  /* Motto should not add vertical bulk */
  header .motto,
  header .oo-motto,
  .oo-header .motto,
  .oo-header .oo-motto {
    margin-top: 0 !important;
    margin-bottom: 0 !important;
    padding-top: 0 !important;
    padding-bottom: 0 !important;
    line-height: 1.0 !important;
  }

  /* Make hamburger bigger (cover common class/id variants) */
  .hamburger,
  .oo-hamburger,
  #ooHamburger,
  .menu-toggle {
    padding: 4px !important;
  }

  .hamburger span,
  .oo-hamburger span,
  #ooHamburger span,
  .menu-toggle span {
    width: 34px !important;
    height: 4px !important;
    margin: 7px 0 !important;
  }
}
/* =========================================
   Make search grid match home grid spacing
   ========================================= */

/* Remove extra horizontal padding added by search wrappers */
.search-view,
.search-results,
.search-container,
.search-page {
  padding-left: 0 !important;
  padding-right: 0 !important;
}
/* Mobile: reduce side whitespace on home + search grids */
@media (max-width: 600px) {
  /* App outer container padding */
  #app {
    padding-left: 4px !important;
    padding-right: 4px !important;
  }

  /* Kill any extra padding from wrappers on mobile */
  .home-view,
  .search-view,
  .search-results {
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  /* Ensure the grid itself doesn't add extra side gutters */
  .posts-grid {
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
  }
}
/* Mobile: remove extra left/right whitespace so grids use the screen */
@media (max-width: 700px) {
  /* App root often carries the side padding/max-width */
  main#app, #app {
    max-width: none !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: 4px !important;
    padding-right: 4px !important;
  }

  /* Ensure both home + search wrappers don't add extra padding */
  .home-view,
  .search-view,
  .search-results {
    margin: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
  }

  /* The grid itself should be edge-to-edge inside #app padding */
  #app .posts-grid {
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
    padding: 0 !important;
  }
}
/* Mobile: force Search results area to match Home grid edge spacing */
@media (max-width: 700px) {
  /* Search page wrappers sometimes add their own padding */
  #app .search-view,
  #app .search-view .search-results,
  #app .search-view .search-results > div,
  #app .search-view .search-results .posts-grid,
  #app .search-view .posts-grid.search-grid {
    max-width: none !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    width: 100% !important;
  }

  /* Keep the overall 4px “safe” gutter consistent */
  #app .search-view {
    padding-left: 4px !important;
    padding-right: 4px !important;
  }
}
/* =========================
   Author Box (Post Detail)
   ========================= */

.author-box {
  margin: 28px 0 20px;
  padding: 18px;
  border-top: 1px solid #e6e6e6;
}

.author-box-inner {
  display: flex;
  align-items: flex-start;
  gap: 14px;
}

.author-box-avatar {
  width: 64px;
  height: 64px;
  border-radius: 50%;
  object-fit: cover;
  flex-shrink: 0;
}

.author-box-text {
  flex: 1;
}

.author-box-title {
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: #777;
  margin-bottom: 4px;
}

.author-box-name {
  font-weight: 600;
  margin-bottom: 6px;
}

.author-box-name-link {
  color: #1E90FF;
  text-decoration: none;
}

.author-box-name-link:hover {
  text-decoration: underline;
}

.author-box-bio {
  font-size: 0.9rem;
  line-height: 1.4;
  color: #333;
}

/* Mobile safety */
@media (max-width: 600px) {
  .author-box-inner {
    gap: 12px;
  }

  .author-box-avatar {
    width: 56px;
    height: 56px;
  }
}
/* =========================
   Inline loading spinner
   ========================= */

.oo-detail-loading-inline {
  display: flex;
  align-items: center;
  gap: 8px;
  margin: 6px 0 10px;
  color: #666;
  font-size: 0.9rem;
}

/* Spinner roughly mic-icon sized */
.oo-loading-spinner {
  width: 18px;
  height: 18px;
  border: 2px solid rgba(0, 0, 0, 0.15);
  border-top-color: #1E90FF; /* OkObserver blue */
  border-radius: 50%;
  animation: oo-spin 0.8s linear infinite;
  flex-shrink: 0;
}

/* Hide text visually if you ever want spinner-only */
/* (leave visible for now — safer) */
.oo-loading-text {
  white-space: nowrap;
}

@keyframes oo-spin {
  to {
    transform: rotate(360deg);
  }
}

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce) {
  .oo-loading-spinner {
    animation: none;
  }
}
.oo-detail-loading-inline {
  display: flex;
  align-items: center;
  margin: 6px 0 10px;
}

.oo-loading-spinner {
  width: 18px;
  height: 18px;
  border: 2px solid rgba(0, 0, 0, 0.15);
  border-top-color: #1E90FF;
  border-radius: 50%;
  animation: oo-spin 0.8s linear infinite;
}

@keyframes oo-spin {
  to { transform: rotate(360deg); }
}

@media (prefers-reduced-motion: reduce) {
  .oo-loading-spinner { animation: none; }
}
/* 🟢 Post detail inline loading text (2026-01-29) */
.oo-detail-loading-inline {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.95rem;
  color: #555;
}

.oo-detail-loading-text {
  line-height: 1;
}
/* 🔴 Post detail inline loading text */
/* 🟢 Table of Contents view (loaded titles only) — OkObserver-ish styling */
.toc-view{
  max-width: 860px;
  margin: 18px auto 64px;
  padding: 0 var(--oo-gutter, 16px);
}

.toc-title{
  margin: 18px 0 6px;
  font-size: 1.6rem;
  line-height: 1.15;
  color: var(--oo-blue, #1E90FF);
}

.toc-subtitle{
  margin: 0 0 14px;
  color: var(--oo-muted, #667085);
  font-size: 0.95rem;
}

.toc-list{
  list-style: none;
  padding: 0;
  margin: 0;
  display: grid;
  gap: 10px;
}

.toc-item{
  background: var(--oo-card, #fff);
  border-radius: var(--oo-radius, 14px);
  box-shadow: var(--oo-shadow, 0 6px 18px rgba(0,0,0,.10));
  padding: 12px 14px;
}

.toc-link{
  display: block;
  font-weight: 800;
  font-size: 1.02rem;
  line-height: 1.25;
  color: var(--oo-blue, #1E90FF);
  text-decoration: none;
}

.toc-link:hover{
  text-decoration: underline;
}

.toc-link:focus-visible{
  outline: 2px solid rgba(30,144,255,.55);
  outline-offset: 3px;
  border-radius: 10px;
}

.toc-meta{
  margin-top: 6px;
  font-size: 0.92rem;
  color: var(--oo-muted, #667085);
}

.toc-empty{
  padding: 10px 0;
  color: var(--oo-muted, #667085);
}
.toc-empty a{
  color: var(--oo-blue, #1E90FF);
  font-weight: 700;
}
/* 🔴 Table of Contents view end */
/* 🟢 mobile white-gap fix — tighten space under header */
@media (max-width: 720px){
  .post-detail{
    margin-top: 8px !important;   /* was effectively ~24px */
    padding-top: 0 !important;
  }
}
/* 🔴 mobile white-gap fix */
/* 🟢 mobile header offset kill — remove phantom top gap */
@media (max-width: 720px){
  body{
    padding-top: 0 !important;
  }
}
/* 🔴 mobile header offset kill */
/* === OkObserver mobile header gap + menu clipping fix (append-only) === */

/* 1) Kill the “mystery gap” under the header on mobile by removing top offsets
   that commonly get introduced by older header-spacer experiments. */
@media (max-width: 720px) {
  body { margin-top: 0 !important; padding-top: 0 !important; }
  #app { margin-top: 0 !important; padding-top: 0 !important; }
  main#app { margin-top: 0 !important; padding-top: 0 !important; }

  /* If any view wrappers exist, this prevents a hidden top spacer from pushing content down */
  .oo-view, .oo-page, .oo-content, .oo-grid, .oo-toc {
    margin-top: 0 !important;
    padding-top: 0 !important;
  }
}

/* 2) Fix the hamburger dropdown being “cut off” by overriding the .oo-menu collision.
   Your nav is: <nav id="oo-menu" class="oo-menu" ...> so we must force nav#oo-menu to behave like a dropdown,
   regardless of any legacy `.oo-menu { ... }` rules elsewhere in the file. */

/* When the nav is closed via [hidden], force it truly off */
nav#oo-menu.oo-menu[hidden] { display: none !important; }

/* If your menu list exists inside, make sure the first item can’t render “above” the viewport */
nav#oo-menu.oo-menu .oo-menu-list,
nav#oo-menu.oo-menu ul {
  margin-top: 0 !important;
  padding-top: 0 !important;
}
/* --- Mobile hamburger: ensure dropdown starts below sticky header --- */

  /* If you render an inner panel instead (covers both structures) */
  nav#oo-menu.oo-menu .oo-menu-panel,
  nav#oo-menu.oo-menu .oo-menu-content,
  nav#oo-menu.oo-menu ul,
  nav#oo-menu.oo-menu .oo-menu-list{
    padding-top: 0 !important;
    margin-top: 0 !important;
  }
}
/* --- End mobile hamburger fix --- */
/* --- TTS speaker polish --- */
.oo-tts-icon{
  width: 20px;
  height: 20px;
  display: inline-block;
  color: #1E90FF; /* OkObserver blue */
}

@media (max-width: 720px){
  .oo-tts-icon{
    width: 22px;
    height: 22px;
  }
}
/* --- end TTS polish --- */
/* 🟢 TTS button mobile polish (2026-02-15) */
.post-detail .tts-button {
  -webkit-tap-highlight-color: transparent;
  appearance: none;
  border: 1px solid rgba(0,0,0,0.18);
  background: #fff;
  border-radius: 999px;

  /* make it a real tap target */
  width: 44px;
  height: 44px;
  padding: 0;

  display: inline-flex;
  align-items: center;
  justify-content: center;

  /* make whatever glyph/SVG inside scale */
  font-size: 26px;
  line-height: 1;

  box-shadow: 0 6px 14px rgba(0,0,0,0.12);
}

@media (max-width: 480px) {
  .post-detail .tts-button {
    width: 52px;
    height: 52px;
    font-size: 32px;
  }
}

.post-detail .tts-button:active {
  transform: scale(0.98);
}
/* 🔴 TTS button mobile polish */
/* === stickyHeaderFixR1: undo body height trap that limits position:sticky === */
/* If html/body are forced to height:100%, sticky header can stop after ~1 viewport. */
html, body{
  height: auto !important;
  min-height: 100% !important;
}
/* === end stickyHeaderFixR1 === */
/* === ttsStableBoxR1: prevent excerpt layout shift during prefill → full swap === */
.post-detail .tts-button{
  /* Fixed control box so line wrapping never changes */
  width: 44px;
  height: 44px;
  min-width: 44px;
  min-height: 44px;

  display: inline-flex;
  align-items: center;
  justify-content: center;

  padding: 0;
  line-height: 1;
  font-size: 22px; /* stable default */
}

@media (max-width: 720px){
  .post-detail .tts-button{
    width: 44px;
    height: 44px;
    min-width: 44px;
    min-height: 44px;
    font-size: 22px; /* DO NOT scale up on mobile; avoids shift */
  }
}
/* === end ttsStableBoxR1 === */
/* 🟢 menuScrollMobileFix-2026-02-16
   Make the hamburger menu panel scroll on mobile so top items (like “News”) never disappear. */
:root{ --oo-menu-top: 120px; } /* desktop-ish header height */
@media (max-width: 720px){
  :root{ --oo-menu-top: 96px; }  /* mobile header height */
}

nav#oo-menu.oo-menu{
  position: fixed !important;
  left: 12px !important;
  right: 12px !important;
  top: var(--oo-menu-top) !important;
  bottom: 12px !important;

  overflow-y: auto !important;
  -webkit-overflow-scrolling: touch;

  /* keep your “card” look */
  background: #fff !important;
  border-radius: 16px !important;

  z-index: 3000 !important;
}

nav#oo-menu.oo-menu[hidden]{ display: none !important; }
/* 🔴 menuScrollMobileFix-2026-02-16 */

/* --- Hamburger submenu styling: TOC under News --- */
.oo-menu-list li.oo-submenu a{
  padding-left: 28px !important;
  font-size: 0.98em;
  opacity: 0.92;
}
.oo-menu-list li.oo-submenu a::before{
  content: "↳";
  display: inline-block;
  margin-right: 8px;
  opacity: 0.7;
}
/* 🟢 Hamburger menu: ensure scroll on mobile + desktop (2026-02-16) */
body.is-menu-open nav#oo-menu.oo-menu{
  max-height: calc(100vh - 80px) !important;
  overflow-y: auto !important;
  -webkit-overflow-scrolling: touch;
}

/* prevent phantom spacing pushing items out */
body.is-menu-open nav#oo-menu.oo-menu .oo-menu-list{
  margin: 0 !important;
  padding: 0 !important;
}
/* 🔴 end hamburger scroll fix */
/* 🟢 focus pass — small, production-safe accessibility polish */
.oo-hamburger:focus-visible{
  outline: 3px solid #ffffff !important;
  outline-offset: 3px !important;
}

nav#oo-menu.oo-menu a:focus-visible,
.post-card-title-link:focus-visible,
.search-input:focus-visible,
.search-submit:focus-visible{
  outline: 2px solid #1E90FF !important;
  outline-offset: 2px !important;
  border-radius: 10px !important;
  text-decoration: none !important;
}

nav#oo-menu.oo-menu a:focus-visible{
  background: #eef4ff !important;
}
/* 🔴 focus pass */
/* 🟢 TTS placement: ensure it sits below embeds on detail pages */
/* ========================================
   🟢 FINAL mobile detail no-jump TTS layout
   Single strategy only:
   - speaker row stays in normal flow
   - no absolute positioning
   - no left gutter reservation
   - no padding-top reservation
   ======================================== */

/* Keep leading embeds stable above the speaker row */
.post-detail-content iframe,
.post-detail-content video,
.post-detail-content .wp-block-embed {
  display: block;
  margin-bottom: 12px;
}

/* Speaker row is a normal block in the flow */
.post-detail .post-detail-tts-row {
  display: flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
  width: 100% !important;
  min-height: 44px !important;
  margin: 12px 0 8px !important;
  padding: 0 !important;
  position: static !important;
  left: auto !important;
  top: auto !important;
  right: auto !important;
  z-index: auto !important;
  pointer-events: auto !important;
  box-sizing: border-box !important;
}

/* Button stays in normal flow too */
.post-detail .post-detail-tts-row .tts-button {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 44px !important;
  height: 44px !important;
  margin: 0 !important;
  padding: 8px !important;
  position: static !important;
  left: auto !important;
  top: auto !important;
  z-index: auto !important;
  vertical-align: middle !important;
  pointer-events: auto !important;
  flex: 0 0 44px !important;
}

/* Content wrapper must not reserve fake speaker space */
.post-detail .post-detail-content,
.post-detail .post-detail-content.entry-content,
.post-detail .entry-content,
.post-detail .post-content {
  position: static !important;
  margin-left: 0 !important;
  padding-top: 0 !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  box-sizing: border-box !important;
}

/* Prevent first real content block from adding a sudden top jump */
.post-detail .post-detail-content > :not(.post-detail-tts-row):first-child,
.post-detail .post-detail-content.entry-content > :not(.post-detail-tts-row):first-child {
  margin-top: 0 !important;
}

.post-detail .post-detail-content > .wp-block:first-child,
.post-detail .post-detail-content.entry-content > .wp-block:first-child,
.post-detail .post-detail-content > p:first-of-type,
.post-detail .post-detail-content.entry-content > p:first-of-type {
  margin-top: 0 !important;
}

/* Mobile content padding: one stable layout only */
@media (max-width: 640px) {
  .post-detail .post-detail-content,
  .post-detail .post-detail-content.entry-content,
  .post-detail .entry-content,
  .post-detail .post-content {
    padding-left: 16px !important;
    padding-right: 16px !important;
  }

  .post-detail .post-detail-tts-row {
    padding-left: 16px !important;
    padding-right: 16px !important;
    margin: 10px 0 6px !important;
  }
}
/* ========================================
   🟢 Mobile detail shell: make loading row non-layout
   Reason:
   - prefill shell currently inserts .oo-detail-loading-inline
     above the excerpt
   - final render does not
   - same text ends up lower in shell, then jumps upward
   ======================================== */
@media (max-width: 640px) {
  .oo-detail-prefill .post-detail-content {
    position: relative !important;
  }

  .oo-detail-prefill .oo-detail-loading-inline {
    position: absolute !important;
    top: 8px !important;
    right: 16px !important;
    z-index: 6 !important;
    margin: 0 !important;
    min-height: 0 !important;
    pointer-events: none !important;

    display: inline-flex !important;
    align-items: center !important;
    gap: 6px !important;

    padding: 4px 8px !important;
    border-radius: 999px !important;
    background: rgba(255,255,255,0.92) !important;
    box-shadow: 0 2px 8px rgba(0,0,0,0.08) !important;
  }

  .oo-detail-prefill .oo-loading-text {
    font-size: 0.85rem !important;
    line-height: 1 !important;
    white-space: nowrap !important;
  }

  .oo-detail-prefill .oo-loading-spinner {
    flex: 0 0 auto !important;
  }
}