/* ============================================================
   Zysk UI — SPA component layer
   Namespaced (.zk-*), self-contained tokens, NO global reset and
   NO body override — safe to link alongside Tailwind + styles.css.
   Fonts (Fraunces / IBM Plex) are already loaded by index.html.
   ============================================================ */

:root{
  --zk-paper:#F5F1EA; --zk-paper-deep:#EBE5DA; --zk-card:#fff;
  --zk-ink:#1B3022; --zk-ink-soft:#2D4A38; --zk-ink-muted:#4A6B5E;
  --zk-accent:#C5A059; --zk-accent-hi:#D8BC85; --zk-accent-lo:#9E7F3E;
  /* Gold TEXT on cream (.zk-eyebrow.zk-gold) only — #C5A059 itself is
     1.96:1 on --zk-paper-deep (#EBE5DA), below WCAG AA's 4.5:1 for normal
     text. --zk-accent is unchanged and still used as-is for buttons,
     borders, and gold text on dark backgrounds, none of which were flagged.
     #7A5C1E already exists as scripts.js's own "goldTxt" — the same darker
     gold already used for readable gold text on this exact cream background
     elsewhere in the app (PortalLoginView, etc.) — reused here rather than
     inventing a second value. 4.96:1 on --zk-paper-deep. */
  --zk-accent-txt:#7A5C1E;
  /* Gold-text systemic fix (manual QA Stage 1): --zk-gold-text is the single
     variable every gold-TEXT rule should read from. Default (root) resolves
     to the dark gold, correct for the common case — gold text on a
     cream/light section. Any section with a dark (--zk-ink) background
     must carry .zk-sec-dark, which flips the variable to the light gold
     (--zk-accent, 5.73:1 on --zk-ink) for every descendant. This replaces
     per-callsite guessing between --zk-accent and --zk-accent-txt — the
     cause of the WEEKLY LEDGER / EVENT PARTNERS failures (dark gold
     hardcoded onto a dark section, 2.26:1) — with one class applied once,
     on the section itself. */
  --zk-gold-text: var(--zk-accent-txt);
  --zk-positive:#2D6A4F; --zk-rule:#D9D2C5;
  --zk-display:'Fraunces','Playfair Display',Georgia,serif;
  --zk-body:'IBM Plex Sans',system-ui,sans-serif;
  --zk-mono:'IBM Plex Mono',ui-monospace,monospace;
  --zk-radius:8px;
}

/* ── gold topline (fixed 3px bar) ── */
.zk-topline{position:fixed;top:0;left:0;right:0;height:3px;z-index:60;background:linear-gradient(90deg,var(--zk-accent-lo),var(--zk-accent),var(--zk-accent-hi),var(--zk-accent))}

/* ── brand mark + wordmark ── */
.zk-mark{width:34px;height:34px;border-radius:var(--zk-radius);background:var(--zk-accent);color:var(--zk-ink);display:inline-flex;align-items:center;justify-content:center;font-family:var(--zk-display);font-weight:600;font-size:1.25rem;line-height:1}
.zk-wm{font-family:var(--zk-display);font-weight:600;font-size:1.15rem;color:var(--zk-ink)}
.zk-wm i{color:var(--zk-accent);font-style:normal}

/* ── ring nodes: shared circular gold-ring marker — spine timeline nodes + audience feature anchors ── */
.zk-ring-node{display:flex;align-items:center;justify-content:center;flex-shrink:0;border-radius:50%;background:var(--zk-paper);border:2px solid var(--zk-accent);font-family:var(--zk-mono);font-size:.75rem;width:40px;height:40px;line-height:1}
.zk-ring-node-lg{width:76px;height:76px;font-family:var(--zk-display);font-size:2rem;font-weight:300;font-style:italic}

/* ── audience Venn wash: soft overlapping circle tints behind the 3 audience columns.
   Painted as this wrapper's own background (never bleeds past its box — no overflow:hidden
   needed), so card content stacks on top automatically. Desktop (lg+) only: below the 3-col
   breakpoint the columns stack and the wash is dropped, leaving the plain cream panel. ── */
.zk-audience-venn{position:relative;background-color:var(--zk-paper)}
@media(min-width:1024px){
  .zk-audience-venn{
    background-repeat:no-repeat;
    background-image:
      radial-gradient(circle 300px at 16.667% 50%, rgba(27,48,34,.12) 0%, rgba(27,48,34,.06) 55%, rgba(27,48,34,0) 100%),
      radial-gradient(circle 360px at 50% 50%, rgba(197,160,89,.18) 0%, rgba(197,160,89,.09) 55%, rgba(197,160,89,0) 100%),
      radial-gradient(circle 300px at 83.333% 50%, rgba(27,48,34,.12) 0%, rgba(27,48,34,.06) 55%, rgba(27,48,34,0) 100%);
  }
}

/* ── nav links (mono, uppercase) ── */
.zk-navlink{font-family:var(--zk-mono);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--zk-ink-muted);transition:color .2s;cursor:pointer}
.zk-navlink:hover,.zk-navlink.zk-current{color:var(--zk-ink)}

/* ── mobile nav menu (TopNav, below the md breakpoint) ──
   Hamburger toggle is a fixed 44×44px square (WCAG 2.5.5 minimum target
   size) regardless of icon metrics. The panel hangs off the header (its
   nearest positioned ancestor, via `sticky`), spanning the full width.
   zk-mobile-navlink rows use flex+min-height (not padding-derived height)
   for the same guaranteed-44px reason, and are real full-width <button>s —
   plain disclosure links, not an ARIA menu widget (role="menu" requires
   arrow-key navigation this doesn't implement; a semantic <nav> of buttons
   is the safer, still fully accessible choice for axe/WCAG). */
.zk-mobile-menu-btn{display:flex;align-items:center;justify-content:center;width:44px;height:44px;flex-shrink:0;border-radius:var(--zk-radius);border:1px solid var(--zk-rule);background:transparent;color:var(--zk-ink);cursor:pointer}
.zk-mobile-menu-btn:hover{border-color:var(--zk-accent);background:var(--zk-paper-deep)}
.zk-mobile-sheet{position:absolute;top:100%;left:0;right:0;z-index:1;background:var(--zk-paper);border-bottom:1px solid var(--zk-ink);box-shadow:0 16px 32px -12px rgba(27,48,34,.25);max-height:calc(100vh - 64px);overflow-y:auto}
.zk-mobile-navlink{display:flex;align-items:center;width:100%;min-height:44px;box-sizing:border-box;padding:10px 24px;font-family:var(--zk-mono);font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:var(--zk-ink-soft);background:none;border:none;border-bottom:1px solid var(--zk-rule);cursor:pointer;text-align:left}
.zk-mobile-navlink:hover,.zk-mobile-navlink.zk-current{color:var(--zk-ink);background:var(--zk-paper-deep)}
.zk-mobile-sheet-auth{padding:16px 24px;display:flex;flex-direction:column;gap:10px;border-top:1px solid var(--zk-rule)}
.zk-mobile-sheet-auth .zk-mobile-navlink{border-bottom:none;padding-left:0;padding-right:0}
.zk-mobile-sheet-label{font-family:var(--zk-mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--zk-ink-muted);padding-top:4px}

/* ── eyebrow / section labels ── */
.zk-eyebrow{font-family:var(--zk-mono);font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;color:var(--zk-ink-muted)}
/* zk-gold = gold eyebrow on CREAM (darkened --zk-accent-txt, 4.96:1 on
   --zk-paper-deep). zk-gold-ink = gold eyebrow on the dark --zk-ink section
   background ("§ · Why Zysk") — the ORIGINAL --zk-accent already reaches
   5.73:1 there, so darkening it the same way as the cream case would have
   made it worse, not better (confirmed: --zk-accent-txt on --zk-ink is only
   2.26:1). Two different classes because the same "gold eyebrow" look needs
   two different actual colours depending on what's behind it. */
.zk-eyebrow.zk-gold{color:var(--zk-gold-text)}
.zk-eyebrow.zk-gold-ink{color:var(--zk-accent)}
/* Apply to any dark (--zk-ink background) section wrapper so every
   descendant gold-text rule (.zk-gold, or an inline color:var(--zk-gold-text))
   resolves to the light gold automatically — no per-callsite class picking. */
.zk-sec-dark{--zk-gold-text:var(--zk-accent)}
.zk-sec-kick{display:flex;align-items:baseline;gap:16px}
.zk-sec-kick .zk-rule{flex:1;height:1px;background:var(--zk-rule)}

/* ── buttons ── */
.zk-btn{display:inline-flex;align-items:center;gap:9px;font-family:var(--zk-body);font-weight:600;font-size:.94rem;padding:14px 26px;border-radius:var(--zk-radius);border:1px solid transparent;cursor:pointer;line-height:1;transition:background .2s,color .2s,border-color .2s,transform .2s}
.zk-btn .zk-ar{font-family:var(--zk-mono)}
.zk-btn-primary{background:var(--zk-ink);color:var(--zk-paper);border-color:var(--zk-ink)}
.zk-btn-primary:hover{background:#163a26;transform:translateY(-1px)}
.zk-btn-secondary{background:transparent;color:var(--zk-ink);border-color:var(--zk-rule)}
.zk-btn-secondary:hover{border-color:var(--zk-ink);background:var(--zk-paper-deep)}
.zk-btn-gold{background:var(--zk-accent);color:var(--zk-ink);border-color:var(--zk-accent)}
.zk-btn-gold:hover{background:var(--zk-accent-hi);transform:translateY(-1px)}
.zk-btn-sm{padding:10px 18px;font-size:.86rem}

.zk-cta-link{display:inline-flex;align-items:center;gap:10px;font-weight:600;font-size:1.02rem;color:var(--zk-ink);border-bottom:2px solid var(--zk-accent);padding:2px 0;transition:gap .2s,color .2s;cursor:pointer}
.zk-cta-link:hover{gap:16px;color:var(--zk-accent-lo)}
.zk-cta-link .zk-ar{font-family:var(--zk-mono)}

/* ── status pill ── */
/* color: --zk-accent-txt (not --zk-accent-lo) — this base .zk-pill only
   ever sits on light/cream backgrounds (confirmed: both usages,
   scripts.js:2120 and :2305, are on cream-background cards/sections);
   --zk-accent-lo (#9E7F3E) measured 2.75:1 / 3.02:1 there, below 4.5:1.
   Scoped to this rule rather than changing --zk-accent-lo itself, since
   that token is also used for hover-state text elsewhere
   (.zk-cta-link:hover, .zk-l-view) not flagged here and not audited for
   dark-background use. .zk-pill.zk-loi / .zk-pill.zk-new below use their
   own, different, unflagged tokens and are untouched. */
.zk-pill{font-family:var(--zk-mono);font-size:.62rem;letter-spacing:.12em;text-transform:uppercase;padding:5px 12px;border-radius:100px;white-space:nowrap;background:rgba(197,160,89,.15);color:var(--zk-accent-txt);border:1px solid rgba(197,160,89,.35)}
.zk-pill.zk-loi{background:rgba(45,106,79,.12);color:var(--zk-positive);border-color:rgba(45,106,79,.3)}
.zk-pill.zk-new{background:rgba(27,48,34,.07);color:var(--zk-ink-soft);border-color:var(--zk-rule)}

/* ── listing card ── */
.zk-listing{display:flex;flex-direction:column;background:var(--zk-paper-deep);border:1px solid var(--zk-rule);border-radius:var(--zk-radius);padding:26px 28px;transition:transform .25s cubic-bezier(.2,.7,.2,1),box-shadow .25s cubic-bezier(.2,.7,.2,1),border-color .25s ease;cursor:pointer;text-decoration:none}
.zk-listing:hover{transform:translateY(-4px);box-shadow:0 20px 44px -20px rgba(27,48,34,.22);border-color:var(--zk-accent)}
.zk-listing.zk-featured{background:linear-gradient(145deg,var(--zk-paper-deep),var(--zk-paper));border-color:var(--zk-accent);border-width:2px}
.zk-l-badge{font-family:var(--zk-mono);font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;background:var(--zk-accent);color:var(--zk-ink);padding:4px 12px;border-radius:100px;align-self:flex-start;margin-bottom:14px}
.zk-l-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:16px}
.zk-l-sector{font-family:var(--zk-mono);font-size:.7rem;letter-spacing:.13em;text-transform:uppercase;color:var(--zk-ink-muted)}
.zk-l-title{font-family:var(--zk-display);font-weight:400;font-size:clamp(1.35rem,2vw,1.7rem);line-height:1.14;letter-spacing:-.01em;margin-bottom:22px;color:var(--zk-ink)}
.zk-l-figs{display:flex;gap:34px;margin-top:auto;padding-top:20px;border-top:1px solid var(--zk-rule)}
.zk-l-fig{display:flex;flex-direction:column;align-items:flex-start}
.zk-l-fig .zk-v{font-family:var(--zk-display);font-weight:300;font-size:1.6rem;line-height:1;color:var(--zk-ink)}
.zk-l-fig .zk-k{font-family:var(--zk-mono);font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:var(--zk-ink-muted);margin-top:7px}
.zk-l-view{display:inline-flex;align-items:center;gap:8px;margin-top:22px;font-weight:600;font-size:.86rem;color:var(--zk-ink);border:1px solid var(--zk-rule);border-radius:var(--zk-radius);padding:9px 16px;align-self:flex-start;transition:gap .2s,color .2s,border-color .2s,background .2s}
.zk-listing:hover .zk-l-view{gap:12px;color:var(--zk-accent-lo);border-color:var(--zk-accent);background:rgba(197,160,89,.08)}
.zk-l-view .zk-ar{font-family:var(--zk-mono);display:inline-block;transition:transform .25s ease}
.zk-listing:hover .zk-l-view .zk-ar{transform:translateX(4px)}

/* ── NDA-gated confidential panel + redaction rows ── */
.zk-gated{background:var(--zk-paper-deep);border:1px solid var(--zk-rule);border-radius:var(--zk-radius);padding:30px 30px 34px;position:relative;overflow:hidden}
.zk-gated::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:linear-gradient(90deg,var(--zk-accent-lo),var(--zk-accent),var(--zk-accent-hi))}
.zk-gh{font-family:var(--zk-mono);font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;color:var(--zk-accent);margin-bottom:6px}
.zk-gt{font-family:var(--zk-display);font-weight:400;font-size:1.5rem;letter-spacing:-.01em;margin-bottom:8px;color:var(--zk-ink)}
.zk-gs{color:var(--zk-ink-muted);font-size:.95rem;line-height:1.55;margin-bottom:22px}
.zk-lock-row{display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;padding:15px 0;border-top:1px solid var(--zk-rule)}
.zk-lock-row .zk-ic{width:15px;height:15px;stroke:var(--zk-accent-lo);flex-shrink:0}
.zk-lock-row .zk-lbl{font-size:.98rem;color:var(--zk-ink)}
.zk-lock-row .zk-bar{height:15px;border-radius:4px;background:var(--zk-ink-soft);opacity:.16}

/* ── figure row (financials) ── */
.zk-figrow{display:flex;flex-wrap:wrap;gap:clamp(28px,6vw,72px)}
.zk-figrow .zk-f .zk-v{font-family:var(--zk-display);font-weight:300;font-size:clamp(2.2rem,4.4vw,3.4rem);line-height:1;color:var(--zk-ink)}
.zk-figrow .zk-f:first-child .zk-v{color:var(--zk-accent)}
.zk-figrow .zk-f .zk-k{font-family:var(--zk-mono);font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:var(--zk-ink-muted);margin-top:10px}

/* ── scroll reveal (opt-in) ── */
.zk-reveal{opacity:0;transform:translateY(22px);transition:opacity .8s ease,transform .8s ease}
.zk-reveal.zk-in{opacity:1;transform:none}

/* ── hero staggered reveal (on-load) ── */
.zk-hero-line{opacity:0;transform:translateY(16px);animation:zk-hero-in .4s cubic-bezier(.2,.7,.2,1) forwards}
.zk-hero-line-1{animation-delay:.05s}
.zk-hero-line-2{animation-delay:.15s}
.zk-hero-line-3{animation-delay:.25s}
.zk-hero-line-4{animation-delay:.35s}
.zk-hero-line-5{animation-delay:.45s}
@keyframes zk-hero-in{to{opacity:1;transform:none}}

/* ── footer gold accent line ── */
.zk-foot-accent{position:relative}
.zk-foot-accent::before{content:"";position:absolute;top:-1px;left:50%;transform:translateX(-50%);width:80px;height:3px;background:linear-gradient(90deg,var(--zk-accent-lo),var(--zk-accent),var(--zk-accent-hi))}

@media(prefers-reduced-motion:reduce){
  .zk-reveal{opacity:1;transform:none}
  .zk-btn:hover,.zk-listing:hover{transform:none}
  .zk-hero-line{opacity:1;transform:none;animation:none}
}

/* ── admin hub shell (rail + dashboard) ── */
.zk-adm{--a-bg:#EFE8D7;--a-panel:#FBF8F1;--a-card:#FFFFFF;--a-ink:#24261E;--a-muted:#78745F;--a-faint:#9A957E;--a-green:#33402C;--a-green2:#2A3524;--a-gold:#A67C39;--a-ox:#7A2E2E;--a-line:#E4DCC8;--a-line2:#EFE9DA;--a-serif:"Iowan Old Style",Georgia,"Times New Roman",serif;display:flex;min-height:70vh;background:var(--a-bg);color:var(--a-ink)}
.zk-adm-rail{width:236px;flex:none;background:var(--a-panel);border-right:1px solid var(--a-line);padding:16px 12px 24px}
.zk-adm-nav{display:flex;flex-direction:column;gap:1px}
.zk-adm-navh{margin:15px 10px 6px;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--a-faint);font-weight:700}
.zk-adm-navlink{display:flex;align-items:center;gap:10px;padding:8px 10px;border:0;background:none;border-radius:6px;color:var(--a-ink);font-size:13.5px;cursor:pointer;text-align:left;width:100%}
.zk-adm-navlink:hover{background:#F2ECDC}
.zk-adm-navlink.on{background:var(--a-green);color:#EDE7D6}
.zk-adm-lbl{flex:1}
.zk-adm-ct{font-size:11px;color:var(--a-muted);background:#EDE6D5;border-radius:999px;padding:1px 7px;min-width:20px;text-align:center}
.zk-adm-navlink.on .zk-adm-ct{background:var(--a-green2);color:#D9E0CE}
.zk-adm-ct.attn{background:#F0DED6;color:var(--a-ox)}
.zk-adm-main{flex:1;min-width:0;padding:22px 26px 48px}
.zk-adm-h1{font-family:var(--a-serif);font-size:26px;margin:2px 0}
.zk-adm-sub{color:var(--a-muted);font-size:13px;margin-bottom:18px}
.zk-adm-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-bottom:20px}
.zk-adm-tile{background:var(--a-card);border:1px solid var(--a-line);border-radius:8px;padding:14px 15px;cursor:pointer}
.zk-adm-tile .lab{font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--a-gold);font-weight:700}
.zk-adm-tile .num{font-family:var(--a-serif);font-size:34px;line-height:1.05;margin-top:6px}
.zk-adm-tile .foot{font-size:11.5px;color:var(--a-muted);margin-top:2px}
.zk-adm-tile.attn{border-color:#E4C9BE;background:#FBF1EC}
.zk-adm-tile.attn .lab{color:var(--a-ox)}
.zk-adm-panel{background:var(--a-card);border:1px solid var(--a-line);border-radius:8px;overflow:hidden}
.zk-adm-panel h3{font-family:var(--a-serif);font-size:16px;margin:0;padding:13px 16px;border-bottom:1px solid var(--a-line2)}
.zk-adm-arow{display:flex;align-items:center;gap:12px;padding:11px 16px;border-bottom:1px solid var(--a-line2);font-size:13.5px}
.zk-adm-arow:last-child{border-bottom:0}
.zk-adm-arow .go{margin-left:auto;color:var(--a-gold);background:none;border:0;cursor:pointer;font-size:12.5px}
@media(max-width:820px){.zk-adm{flex-direction:column}.zk-adm-rail{width:auto;border-right:0;border-bottom:1px solid var(--a-line)}}

/* Admin form inputs */
.zk-adm .zk-adm-input {
  width: 100%;
  background: var(--a-card);
  border: 1px solid var(--a-line);
  border-radius: 8px;
  padding: 9px 12px;
  font-size: 14px;
  color: #1B3022;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.zk-adm .zk-adm-input::placeholder { color: #9AA69E; }
.zk-adm .zk-adm-input:focus {
  outline: none;
  border-color: #C5A059;
  box-shadow: 0 0 0 3px rgba(197,160,89,0.15);
}

/* Primary action button (gold) */
.zk-adm .zk-adm-btn {
  display: inline-flex; align-items: center; justify-content: center;
  gap: 6px;
  background: #C5A059;
  color: #FFFFFF;
  border: 1px solid #C5A059;
  border-radius: 8px;
  padding: 9px 18px;
  font-size: 14px;
  font-weight: 500;
  cursor: pointer;
  transition: background .15s ease, opacity .15s ease;
}
.zk-adm .zk-adm-btn:hover { background: #9E7F3E; border-color: #9E7F3E; }
.zk-adm .zk-adm-btn:disabled { opacity: .55; cursor: default; }

/* Secondary / outline button */
.zk-adm .zk-adm-btn-secondary {
  display: inline-flex; align-items: center; justify-content: center;
  gap: 6px;
  background: transparent;
  color: #4A5C52;
  border: 1px solid var(--a-line);
  border-radius: 8px;
  padding: 9px 18px;
  font-size: 14px;
  cursor: pointer;
  transition: background .15s ease;
}
.zk-adm .zk-adm-btn-secondary:hover { background: #F5F1EA; }

/* Admin table */
.zk-adm .zk-adm-table { width: 100%; border-collapse: separate; border-spacing: 0; }
.zk-adm .zk-adm-table thead th {
  text-align: left;
  font-family: ui-monospace, monospace;
  font-size: 10px; text-transform: uppercase; letter-spacing: .06em;
  color: #4A5C52;
  background: #EBE5DA;
  padding: 10px 16px;
  border-bottom: 1px solid var(--a-line);
}
.zk-adm .zk-adm-table tbody td { padding: 12px 16px; font-size: 14px; border-bottom: 1px solid #E8E2D4; }
.zk-adm .zk-adm-table tbody tr { cursor: pointer; transition: background .12s ease; }
.zk-adm .zk-adm-table tbody tr:hover { background: #FAF8F3; }
.zk-adm .zk-adm-table-wrap { border: 1px solid var(--a-line); border-radius: 8px; overflow: hidden; }

/* Shared rounded box for admin detail modals (composes with each modal's inline maxWidth/maxHeight/background/border) */
.zk-adm-modal-box {
  border-radius: 8px;
  overflow: hidden;
  box-shadow: 0 12px 40px rgba(27,48,34,0.18);
}
