  /* Daniel, 2026-08-20: "implement these ui/ux, feature, enhancements, and
     upgrades" (bridgestar-prototype_1.html) -- full site-wide re-skin per
     that decision. Design tokens below are remapped to the prototype's
     palette and type system; every existing rule that already reads
     var(--navy)/var(--gold)/var(--paper)/var(--font-display)/etc. picks up
     the new look automatically, without a rule-by-rule rewrite of the
     ~10,000 lines of CSS/markup built up over this project. Variable
     NAMES were deliberately left alone (still --gold, not --rust) so
     every existing usage site keeps working unchanged; only the VALUES
     changed. The chamfered "riveted plate" shape motif and truss texture
     from the prototype are applied to buttons everywhere and to the
     public marketing site's cards specifically (see .plate/.truss-bg
     below and the component sections they're used in) -- the deeper
     authenticated portal (bank verification, notary sessions, Admin
     Panel tables, etc.) inherits the new palette and type everywhere but
     keeps its existing card shapes rather than a blind chamfer sweep
     across dozens of screens with no way to visually verify each one. */
  :root{
    --navy:#0f2438; --navy-2:#1c3852; --navy-3:#14314a;
    --gold:#b5591f; --gold-light:#e8a05c;
    --paper:#f5f1e8; --paper-deep:#ece4d2; --panel:#ffffff; --ink:#182430; --muted:#57646f; --line:#e2d8c5;
    --gold-deep:#8a4118;
    --green:#39704b; --green-bg:#e4f2e9;
    --amber:#a35a3a; --amber-bg:#fdf1e0;
    --red:#a3312a; --red-bg:#f7e6e4;
    --blue:#26436b; --blue-bg:#eaf0f8;
    --ls-cyan:#4fe3ff; --ls-cyan-dim:#1a5f70;
    --rust-tint:#f3e0cc;
    /* Space Grotesk for display/editorial moments (brand wordmark, hero
       headlines), Inter for UI chrome, IBM Plex Mono for numbers/labels
       that want a technical, tabular feel (stat figures, pills, badges) --
       matches the prototype's type system, replacing the earlier
       Source Serif 4 / Inter pairing. */
    --font-display:'Space Grotesk', -apple-system, sans-serif;
    --font-ui:'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
    --font-mono:'IBM Plex Mono', 'Courier New', monospace;
    color-scheme: light;
  }
  *{box-sizing:border-box;}
  body{margin:0;font-family:var(--font-ui);background:var(--paper);color:var(--ink);line-height:1.5;-webkit-font-smoothing:antialiased;}
  a{color:var(--navy-2);}
  h1,h2,h3{font-family:var(--font-display);font-weight:600;letter-spacing:-.01em;}

  /* ===== Chamfered "riveted plate" shape + truss texture, the
     prototype's signature motifs ===== */
  .plate{clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px);}
  .plate-sm{clip-path:polygon(6px 0,100% 0,100% calc(100% - 6px),calc(100% - 6px) 100%,0 100%,0 6px);}
  .truss-bg{
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='48'%3E%3Cpath d='M0 48 L24 0 L48 48 L72 0 L96 48' stroke='rgba(255,255,255,0.08)' stroke-width='1.3' fill='none'/%3E%3Cline x1='0' y1='47.3' x2='96' y2='47.3' stroke='rgba(255,255,255,0.08)' stroke-width='1.3'/%3E%3C/svg%3E");
    background-repeat:repeat-x;background-position:bottom left;
  }
  .processcard{background:var(--navy);color:#fff;}
  .processcard h3{color:#fff;margin-top:0;}
  .processcard .procsub{color:var(--gold-light);font-size:.76rem;text-transform:uppercase;letter-spacing:.08em;margin:0 0 14px;}
  .processcard .procsteps{list-style:none;margin:0;padding:0;display:grid;gap:14px;}
  .processcard .procsteps li{display:flex;gap:12px;align-items:flex-start;}
  .processcard .procnum{flex:0 0 auto;width:24px;height:24px;border-radius:50%;border:1px solid var(--gold);color:var(--gold-light);font-size:.72rem;font-weight:700;display:flex;align-items:center;justify-content:center;}
  /* Daniel, 2026-08-28 ("update this dashboard to show that is in QA before
     funding, give an explanation of what this is etc, this should be
     prominent on the dashboard"): same navy/gold "important, institutional"
     treatment as .processcard above, deliberately the most visually
     prominent card on Overview -- reflects real state from finalQaGate()
     in lib/store.js via /auth-funding-readiness, see renderFinalQaCard(). */
  .finalqacard{background:var(--navy);color:#fff;border:1px solid var(--gold);}
  .finalqacard h3{color:#fff;margin-top:0;display:flex;align-items:center;gap:10px;}
  .finalqacard .fqasub{color:var(--gold-light);font-size:.76rem;text-transform:uppercase;letter-spacing:.08em;margin:0 0 10px;}
  .finalqacard p{color:#cbd6e2;font-size:.86rem;line-height:1.6;}
  .fqarows{display:grid;gap:0;margin-top:14px;border-top:1px solid rgba(255,255,255,.14);}
  .fqarow{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid rgba(255,255,255,.14);font-size:.84rem;}
  .fqarowlabel{color:#cbd6e2;}
  .fqarowstate{font-weight:700;letter-spacing:.03em;text-transform:uppercase;font-size:.72rem;padding:3px 10px;border-radius:20px;}
  .fqarowstate.clear{color:#8fd6ad;background:rgba(63,122,82,.18);}
  .fqarowstate.standby{color:var(--gold-light);background:rgba(181,89,31,.18);}
  .fqarowstate.go{color:#8fd6ad;background:rgba(63,122,82,.18);}
  .fqadot{width:7px;height:7px;border-radius:50%;background:var(--ls-cyan);box-shadow:0 0 6px 1px rgba(79,227,255,.7);display:inline-block;animation:lsdotpulse 1.6s ease-in-out infinite;}
  .processcard .procline{font-size:.86rem;line-height:1.5;color:#dbe2ec;}
  .statblock{display:grid;grid-template-columns:repeat(4,1fr);gap:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:22px 0 26px;}
  .statitem{text-align:center;padding:18px 10px;border-left:1px solid var(--line);}
  .statitem:first-child{border-left:none;}
  .statnum{font-family:var(--font-display);font-size:1.8rem;font-weight:600;color:var(--navy);}
  .statlabel{font-size:.72rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:4px;}
  @media (max-width:640px){.statblock{grid-template-columns:repeat(2,1fr);}.statitem:nth-child(3){border-left:none;}}
  .crosssellcard{border:1px solid var(--gold);border-radius:8px;background:#fffefb;padding:14px 16px;margin:-4px 0 14px;}
  .crosssellcard .csbadge{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:var(--gold);font-weight:700;margin-bottom:4px;}
  .crosssellcard .csline{font-size:.86rem;color:var(--ink);margin:0 0 10px;line-height:1.5;}
  .crosssellcard .csbtns{display:flex;flex-wrap:wrap;align-items:center;gap:10px;}
  .crosssellcard .btn.small{padding:6px 14px;font-size:.8rem;}
  .crosssellcard .csnote{font-size:.74rem;color:var(--muted);}
  .aptagpill{display:inline-block;font-size:.7rem;text-transform:uppercase;letter-spacing:.04em;background:var(--paper);border:1px solid var(--gold);color:var(--navy);padding:2px 8px;border-radius:10px;}
  .scorepill{display:inline-block;font-size:.82rem;font-weight:700;padding:2px 10px;border-radius:10px;font-family:var(--font-ui);}
  .scorepill.good{background:rgba(46,125,79,.12);color:var(--green);}
  .scorepill.ok{background:rgba(181,89,31,.14);color:#8a6a1f;}
  .scorepill.low{background:rgba(178,44,44,.1);color:var(--red);}

  /* ===== Login Gate ===== */
  /* Daniel, 2026-08-22: "there is not a way for the user to go back... it
     doesn't render well at the top of the screen." Classic flexbox bug:
     align-items:center on a scrollable container centers content that's
     taller than the viewport by overflowing it equally on both ends, but
     the browser only lets you scroll DOWN into that overflow, not up --
     so the top of the box (brand, "Return to the homepage" link, the X)
     was rendering above the visible/scrollable area with no way to reach
     it. Only became visible once "Start a New Deal" mode got taller in
     the last redesign; the short plain-login case never overflowed
     enough to expose it. align-items:flex-start is the safe fallback for
     browsers that don't know "safe center"; align-items:safe center (the
     modern fix, wide support) then keeps the nicer vertical centering for
     content that actually fits, without ever reintroducing the
     unreachable-top bug for content that doesn't. */
  #loginGate, #requestAccessGate, #forgotPasswordGate{position:fixed;inset:0;z-index:500;display:flex;align-items:flex-start;align-items:safe center;justify-content:center;background:radial-gradient(circle at 30% 20%, #16345f 0%, var(--navy) 45%, #071426 100%);padding:40px 24px;overflow-y:auto;}
  #loginGate.hidden, #requestAccessGate.hidden, #forgotPasswordGate.hidden, #mfaForm.hidden, #fpResetForm.hidden{display:none;}
  /* Fallback so any element using class="hidden" is actually hidden even if
     nothing above names its specific #id -- this exact bug (a .hidden class
     that didn't hide anything) has now bitten both the MFA step and the
     Reset Password step because only specific IDs were ever covered. */
  .hidden{display:none;}
  .loginbox{background:#fff;border-radius:10px;max-width:420px;width:100%;padding:34px 32px;box-shadow:0 20px 60px rgba(0,0,0,.4);}
  .loginbrand{text-align:center;margin-bottom:22px;}
  .loginbrand .lname{font-family:var(--font-display);font-size:1.6rem;font-weight:600;color:var(--navy);letter-spacing:.02em;}
  .loginbrand .ltag{font-size:.78rem;color:var(--gold);text-transform:uppercase;letter-spacing:.1em;margin-top:2px;}
  .loginbrand .lpartner{font-size:.72rem;color:var(--muted);margin-top:8px;}
  .loginbox label{font-size:.76rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;display:block;margin:14px 0 4px;}
  .loginbox input, .loginbox select{width:100%;padding:10px 11px;border:1px solid #e2d8c5;border-radius:4px;font-family:var(--font-ui);font-size:.92rem;}
  .loginbox button{width:100%;margin-top:20px;background:var(--navy);color:#fff;border:none;padding:12px;border-radius:4px;font-family:var(--font-ui);font-size:.95rem;letter-spacing:.03em;cursor:pointer;}
  .loginbox button:hover{background:var(--navy-2);}
  .loginerr{color:var(--red);font-size:.82rem;margin-top:10px;display:none;}
  /* Daniel, 2026-08-22 (UI/UX QA pass): submitOppBatch()/submitCoBatch()
     (Submit a Deal or Opportunity, both the prospect-facing page and the
     client-in-workspace modal) and submitVofBatch() (Verification
     Requests) all set errEl.textContent on a validation failure but never
     flip errEl.style.display the way every other .loginerr call site in
     this file does -- so a user who leaves a required field blank sees
     nothing happen at all. Scoped to just these three ids (rather than
     changing .loginerr's default behavior everywhere it's used) so every
     other already-working .loginerr toggle is untouched. */
  #oppErr:not(:empty), #coErr:not(:empty), #vofErr:not(:empty){display:block;}
  .loginnote{font-size:.72rem;color:var(--muted);margin-top:18px;text-align:center;line-height:1.5;}
  .loginnote a{color:var(--navy-2);}
  .loginclose{position:absolute;top:14px;right:14px;width:30px;height:30px;display:flex;align-items:center;justify-content:center;background:#ece4d2;border:none;border-radius:50%;color:var(--muted);padding:0;cursor:pointer;transition:background .15s ease,color .15s ease,transform .1s ease;}
  .loginclose:hover{background:#e4e0d2;color:var(--navy);}
  .loginclose:active{transform:scale(.92);}
  .loginclose:focus-visible{outline:2px solid var(--navy);outline-offset:2px;}
  .loginclose svg{display:block;}
  /* Daniel, 2026-08-20: login/signup UX pass -- show/hide toggle on every
     password field (best practice over a second "confirm" field alone,
     see https://euleinstitute.com/en/blog/ux-login-signup-password-
     guidelines/), and a real-time match hint on Confirm Password instead
     of only checking on submit. */
  .pwrow{position:relative;}
  .pwrow input{padding-right:54px;}
  button.pwtoggle{position:absolute;top:50%;right:2px;transform:translateY(-50%);width:auto;margin:0;background:none;border:none;padding:6px 10px;color:var(--muted);font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;cursor:pointer;font-family:var(--font-ui);}
  button.pwtoggle:hover{color:var(--navy);background:none;}
  .pwhint{font-size:.72rem;margin-top:6px;line-height:1.4;}
  .loginswitch{font-size:.78rem;color:var(--muted);text-align:center;margin:-6px 0 16px;}
  .loginswitch button{width:auto;margin:0;background:none;border:none;padding:0;color:var(--gold);text-decoration:underline;cursor:pointer;font-size:inherit;font-family:inherit;}
  .loginswitch button:hover{background:none;color:var(--gold-light);}
  /* Daniel, 2026-08-22: "the form for new deals on the front page still
     looks off, the add another deal function doesn't fit right, redesign
     this... also make it so someone can exit the form... and return
     easily to the home page." The "Start a New Deal" mode of this same
     signup box packs a track picker, dynamic deal fields, and a
     repeatable opportunity list into the same narrow 420px login-style
     column built for a 2-field sign-in form -- widen it, and group its
     fields into clearly separated sections the way Stripe/Mercury-style
     account-setup flows do, instead of one long flat stack of labels. */
  .loginbox.wide{max-width:640px;}
  .rasection{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:16px 18px;margin:18px 0;}
  .rasection label:first-child{margin-top:0;}
  .rasectionhint{font-size:.8rem;color:var(--muted);margin:-4px 0 12px;line-height:1.45;}
  /* .vofrow/.vofrowhead already got a proper card + input treatment in an
     earlier pass (Verification Requests, Submit-a-Deal); addRaOppRow()
     below now reuses that exact same class instead of the bespoke
     .raopprow it used to build, so all four repeatable-opportunity-row
     implementations in this app look and behave identically. The one
     override needed here: .loginbox button is a broad width:100% rule
     meant for this box's single full-width submit button, which would
     otherwise stretch a small "Remove" button the same way and break the
     row header's flex layout. */
  .loginbox .vofrowhead button{width:auto;margin-top:0;}
  .loginbox #raAddOppBtn{width:auto;margin-top:10px;}

  /* ===== Public site (Home / About / Contact) ===== */
  #publicSite.hidden{display:none;}
  /* Daniel, 2026-08-20 (prototype fidelity pass): "yes i want the ui/ux
     from the prototype" -- bridgestar-prototype_1.html's .site-header is
     a LIGHT paper header with a navy wordmark, the dark navy treatment
     lives in the hero banner below it, not the header itself. This was
     inverted (dark header, light hero) since the original re-skin;
     correcting both here and in .hero below so the light-header/dark-hero
     relationship matches the prototype exactly. */
  .pubheader{display:flex;justify-content:space-between;align-items:center;padding:16px 5vw;background:var(--paper);border-bottom:1px solid var(--line);flex-wrap:wrap;gap:12px;}
  .pubbrand{display:flex;align-items:center;gap:12px;}
  .pubbrand .pname{color:var(--navy);font-size:1.3rem;font-weight:700;letter-spacing:.02em;}
  .pubbrand .ptag{color:var(--gold-deep);font-size:.72rem;text-transform:uppercase;letter-spacing:.09em;}
  .pubnav{display:flex;align-items:center;gap:6px;flex-wrap:wrap;}
  .pubnav button.navlink{font-family:var(--font-ui);background:transparent;border:none;color:var(--muted);padding:9px 12px;font-size:.85rem;cursor:pointer;border-bottom:2px solid transparent;}
  .pubnav button.navlink:hover, .pubnav button.navlink.active{color:var(--navy);border-bottom:2px solid var(--gold);}
  .pubmain{max-width:1100px;margin:0 auto;padding:0 5vw;}
  .pubsection{display:none;}
  .pubsection.active{display:block;animation:fade .2s ease;}

  /* Prototype's .hero: full-bleed dark navy banner, left-aligned, eyebrow
     tag + truss texture along the bottom edge. margin/width trick breaks
     it out of .pubmain's centered max-width column without having to
     restructure the Home/About/Contact tab-switching markup around it. */
  .hero{
    background:linear-gradient(175deg,var(--navy) 0%,var(--navy-2) 100%);color:#fff;
    width:100vw;margin-left:calc(-50vw + 50%);margin-right:calc(-50vw + 50%);
    padding:56px 5vw 0;text-align:left;position:relative;overflow:hidden;
  }
  .hero-inner{max-width:1100px;margin:0 auto;padding-bottom:44px;}
  .hero .eyebrow{
    font-family:var(--font-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:#ffb27a;
    display:flex;align-items:center;gap:8px;margin-bottom:16px;
  }
  .hero .eyebrow::before{content:"";width:22px;height:1.5px;background:#ffb27a;display:inline-block;}
  .hero h1{font-size:2.4rem;color:#fff;margin:0 0 14px;letter-spacing:.01em;max-width:640px;}
  .hero p.lead{font-size:1.1rem;color:#c3d2df;max-width:560px;margin:0 0 28px;}
  .hero .herobtns{display:flex;gap:12px;flex-wrap:wrap;}
  .hero .btn.ghost{color:#fff;border-color:rgba(255,255,255,.55);}
  .hero-truss{height:30px;}

  /* Daniel, 2026-08-20: "amp up the front page, look at our peers" -- a
     one-line trust band directly under the hero CTAs, same slot Dealpath
     and Juniper Square use for "Trusted by 300+ Firms" / client-logo
     strips. We don't have permission to publish client names or logos on
     the open internet (see .investticker comment above -- deal flow is
     deliberately not public), so this uses only facts we already show
     elsewhere on this same page (About page's stat block, Our Companies
     count), separated by middot the way peers separate their stat chips. */
  .trustline{margin:18px 0 0;font-size:.8rem;letter-spacing:.03em;color:#9fb3c4;text-transform:uppercase;}
  .trustline strong{color:#fff;font-weight:600;}

  /* Condensed restatement of the About page's .statblock, same 4 figures
     (kept in sync by renderDynamicAboutStats(), see data-stat attributes
     below), placed on the home page the way Dealpath puts its "Proven
     Outcomes" numbers directly under the hero rather than only on an About
     page nobody reaches. Narrower cards than .statitem so it reads as a
     strip, not a repeat of the About page section. */
  .statstrip{display:grid;grid-template-columns:repeat(4,1fr);gap:0;max-width:900px;margin:38px auto 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);}
  .statstrip .statitem{border-left:1px solid var(--line);padding:16px 8px;}
  .statstrip .statitem:first-child{border-left:none;}
  @media (max-width:640px){ .statstrip{grid-template-columns:repeat(2,1fr);} .statstrip .statitem:nth-child(3){border-left:none;} }

  /* Public, pre-login "Our Track Record" teaser card. Daniel, 2026-08-15:
     replaced the old live "Total Investment Value" ticker here, it showed
     a real number to anyone with no login, we don't want to advertise our
     actual deal flow on the open internet. This is now a decorative,
     non-numeric graphic, the real content (current/past deals, partner
     and investor references) only renders inside the logged-in portal's
     "Our Track Record" tab (see renderTrackRecordTab()), gated behind a
     request Tom has to approve. Dark navy card with a gold radial glow,
     kept for visual continuity with the rest of the public page. */
  /* Daniel, 2026-08-23 (UI review pass): this box inherited text-align:left
     from .hero (never set its own), so trheadline/trcopy rendered flush
     left while trgraphic/trbtns directly below (both flex,
     justify-content:center) rendered centered -- an internal misalignment
     inside an otherwise centered, narrow (460px) card. text-align:center
     here makes the whole box consistent. */
  .investticker{max-width:460px;margin:34px auto 0;background:radial-gradient(circle at 30% 20%,#16345f 0%,var(--navy) 55%,#071426 100%);border:1px solid rgba(181,89,31,.35);clip-path:polygon(12px 0,100% 0,100% calc(100% - 12px),calc(100% - 12px) 100%,0 100%,0 12px);padding:26px 30px;box-shadow:0 10px 40px rgba(15,36,56,.25);text-align:center;}
  .investticker .itlive{display:inline-flex;align-items:center;gap:6px;font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;color:#8fd6a8;margin-bottom:10px;}
  .investticker .itlivedot{width:7px;height:7px;border-radius:50%;background:#4fd57c;animation:pulse 1.4s ease-in-out infinite;}
  .investticker .itlabel{font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:#c3d2df;margin-bottom:6px;}
  .investticker .itbig{font-size:2.6rem;font-weight:bold;color:#fff;font-variant-numeric:tabular-nums;line-height:1.1;}
  .investticker .itbig .itcents{font-size:1.4rem;color:#e8a05c;}
  .investticker .itsub{font-size:.76rem;color:#9fb3c4;margin-top:8px;}
  .investticker .itsub strong{color:#e8a05c;font-weight:normal;}
  .investticker .trgraphic{display:flex;justify-content:center;gap:5px;align-items:flex-end;height:54px;margin-bottom:14px;}
  .investticker .trgraphic .bar{width:11px;border-radius:3px 3px 0 0;background:linear-gradient(180deg,#e8a05c 0%,#8a4118 100%);opacity:.85;}
  .investticker .trheadline{font-size:1.15rem;font-weight:bold;color:#fff;margin-bottom:8px;}
  .investticker .trcopy{font-size:.82rem;color:#c3d2df;line-height:1.5;margin-bottom:16px;}
  .investticker .trbtns{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;}
  /* Daniel, 2026-08-23 (UI review pass): .investticker has the same dark
     navy background as .hero and .ctaband, both of which already override
     .btn.ghost to white text/border so it's readable against dark navy --
     this box never got that same override, so "Request Track Record
     Access" (and the new Reset Password button below it) were rendering
     as near-invisible navy-on-navy text. Matches the identical rule in
     .hero and .ctaband above. */
  .investticker .btn.ghost{color:#fff;border-color:rgba(255,255,255,.55);}
  @media (max-width:520px){ .investticker{padding:20px 20px;} .investticker .itbig{font-size:2.1rem;} }
  .featuregrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:18px;margin:50px 0;}
  /* Daniel, 2026-08-20: re-skin -- chamfered "riveted plate" corner on the
     public page's card components (prototype's signature shape motif),
     applied directly on these selectors rather than requiring every call
     site that builds this markup (many of them template strings inside
     the inline JS block) to add a new class name. Scoped to the public
     marketing page's cards + buttons + modals only, see the :root comment
     above for why the deeper authenticated portal keeps its existing
     rounded-corner cards. */
  .featurecard{background:var(--panel);border:1px solid var(--line);clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px);padding:22px;text-align:left;}
  /* Prototype's .icn: every icon sits inside a small chamfered box with a
     rust-tint background, not bare/floating. Same clip-path formula as
     .plate-sm, sized down for a 30-34px icon chip. */
  .featurecard .ficon{width:36px;height:36px;display:flex;align-items:center;justify-content:center;margin-bottom:12px;color:var(--gold);background:var(--rust-tint);clip-path:polygon(6px 0,100% 0,100% calc(100% - 6px),calc(100% - 6px) 100%,0 100%,0 6px);font-size:1.1rem;}
  .featurecard .ficon svg,.rolecard .ficon svg{width:1em;height:1em;display:block;}
  .featurecard h4{margin:0 0 6px;color:var(--navy);font-size:1rem;}
  .featurecard p{margin:0;color:var(--muted);font-size:.86rem;}
  .poweredby{text-align:center;color:var(--muted);font-size:.82rem;margin:40px 0 60px;}
  /* Daniel, 2026-08-20: "who works with us" role cards on the public
     home page, see the rolegrid markup below the hero. Deliberately its
     own class rather than reusing .featurecard/.featuregrid: needs its
     own top margin/columns, distinct from the .featuregrid section
     further down the page. Prototype fidelity pass, 2026-08-20: this grid
     now sits directly on the page's light background AFTER the hero
     banner closes, not inside it (see .hero's own comment) -- matches
     the prototype's persona-grid, which is its own light .section below
     the dark hero, not painted onto the hero itself. */
  .rolegrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:16px;margin:44px 0 10px;text-align:left;}
  .rolecard{background:var(--panel);border:1px solid var(--line);clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px);padding:20px;}
  .rolecard .ficon{width:32px;height:32px;display:flex;align-items:center;justify-content:center;margin-bottom:10px;color:var(--gold);background:var(--rust-tint);clip-path:polygon(6px 0,100% 0,100% calc(100% - 6px),calc(100% - 6px) 100%,0 100%,0 6px);font-size:1rem;}
  .rolecard h4{margin:0 0 6px;color:var(--navy);font-size:.94rem;}
  .rolecard p{margin:0;color:var(--muted);font-size:.82rem;line-height:1.45;}
  .rolecard-clickable{cursor:pointer;transition:border-color .15s,transform .15s;}
  .rolecard-clickable:hover{border-color:var(--gold);transform:translateY(-2px);}
  .sectiontitle{text-align:center;color:var(--navy);font-size:1.4rem;margin:0 0 6px;}
  .sectionsub{text-align:center;color:var(--muted);font-size:.86rem;margin:0;}

  /* Daniel, 2026-08-20: "How BridgeStar Works" lifecycle section on the
     home page, built for the peer-research pass ("look at our peers and
     really build it up") -- Dealpath, Procore, and Juniper Square all
     lead with a numbered lifecycle/workflow narrative right after their
     hero. Reuses the existing .processcard look (navy card, gold-ringed
     step numbers) already established inside the logged-in Dashboard's
     "Our Process" widget, so the public page and the portal feel like the
     same product rather than introducing a second visual language. */
  /* Daniel, 2026-08-20: "the graphic looks off with the blocks across then
     a single one underneath" -- auto-fit was letting the 4 step cards wrap
     3-then-1 at in-between viewport widths (wide enough for 3 columns of
     240px+, not quite wide enough for 4). Fixed column counts per
     breakpoint instead, so it's always a clean 4, 2x2, or single column,
     never an orphaned last card. */
  .howgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin:18px 0 50px;}
  @media (max-width:900px){ .howgrid{grid-template-columns:repeat(2,1fr);} }
  @media (max-width:560px){ .howgrid{grid-template-columns:1fr;} }
  .howcard{background:var(--navy);color:#fff;clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px);padding:22px 22px 26px;text-align:left;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='48'%3E%3Cpath d='M0 48 L24 0 L48 48 L72 0 L96 48' stroke='rgba(255,255,255,0.07)' stroke-width='1.3' fill='none'/%3E%3C/svg%3E");background-repeat:repeat-x;background-position:bottom left;}
  .howcard .procnum{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;border:1px solid var(--gold);color:var(--gold-light);font-size:.8rem;font-weight:700;margin-bottom:12px;}
  .howcard h4{margin:0 0 8px;color:#fff;font-size:.98rem;}
  .howcard p{margin:0;color:#c3d2df;font-size:.84rem;line-height:1.5;}

  /* Compact "Our Family of Companies" strip on the home page -- the full
     .companygrid with blurbs and links lives on the About page (see
     "Our Family of Companies" there), this is a lighter-weight name-only
     version placed on the home page itself, the way peer sites put a
     client-logo row on the homepage rather than making visitors dig for
     it. Text chips, not logos: Kaufman & Company doesn't have a shared
     logo library for every portfolio company on hand, and a text chip
     strip keeps this consistent and fast to maintain. */
  .logostrip{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin:20px 0 8px;}
  .logochip{background:var(--panel);border:1px solid var(--line);border-radius:20px;padding:7px 16px;font-size:.78rem;color:var(--navy);white-space:nowrap;}
  .logostripmore{background:transparent;border:none;color:var(--navy-2);font-size:.78rem;text-decoration:underline;cursor:pointer;padding:7px 4px;}

  /* Short FAQ near the bottom of the home page -- another pattern that
     shows up consistently across peer landing pages (Dealpath's FAQs
     page, Juniper Square's guides), condensed here to the handful of
     questions a brand-new visitor to a multi-track partner portal is
     most likely to actually have. Native <details>/<summary> for the
     expand/collapse, no JS needed. */
  .faqlist{max-width:760px;margin:20px auto 0;text-align:left;}
  .faqitem{border-bottom:1px solid var(--line);padding:16px 4px;}
  .faqitem summary{cursor:pointer;color:var(--navy);font-weight:600;font-size:.92rem;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:12px;}
  .faqitem summary::-webkit-details-marker{display:none;}
  .faqitem summary::after{content:'+';color:var(--gold);font-size:1.2rem;flex:0 0 auto;}
  .faqitem[open] summary::after{content:'\2212';}
  .faqitem p{margin:10px 0 0;color:var(--muted);font-size:.86rem;line-height:1.55;}

  /* Closing CTA band, directly above .poweredby -- Dealpath ends its home
     page the same way ("The Market Moves Fast. Move Faster.") so a
     visitor who scrolled the whole page doesn't have to scroll back to
     the top to act. Same navy/gold treatment as .investticker so it reads
     as part of the same page, not a bolted-on banner. */
  .ctaband{text-align:center;background:radial-gradient(circle at 50% 20%,#16345f 0%,var(--navy) 60%,#071426 100%);clip-path:polygon(14px 0,100% 0,100% calc(100% - 14px),calc(100% - 14px) 100%,0 100%,0 14px);padding:44px 30px;margin:10px 0 50px;}
  .ctaband h3{color:#fff;font-size:1.3rem;margin:0 0 8px;}
  .ctaband p{color:#c3d2df;font-size:.9rem;margin:0 0 22px;max-width:480px;margin-left:auto;margin-right:auto;}
  .ctaband .herobtns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;}
  /* button.btn.ghost is navy-on-transparent by default (built for the
     paper/panel background), which is unreadable on this band's navy
     background -- inverse it here the same way a ghost button needs to
     invert on any dark surface. */
  .ctaband .btn.ghost{color:#fff;border-color:rgba(255,255,255,.55);}

  /* Daniel, 2026-08-20: re-skin -- "A Look Inside Your Workspace" preview
     window, see the HTML comment above the .showcasewrap markup for why
     this is a labeled illustration rather than a real screenshot. Reuses
     .status pill classes and a stepper visual already established
     elsewhere in the app (Readiness Widget / Closing Journey stepper) so
     it reads as the same product, not a one-off graphic. */
  .showcasewrap{margin:26px 0 50px;}
  .showcasewin{background:#fff;border:1px solid var(--line);box-shadow:0 16px 44px rgba(15,36,56,.14);max-width:820px;margin:0 auto;overflow:hidden;}
  .showcasebar{background:var(--navy-3);padding:9px 14px;display:flex;align-items:center;gap:6px;}
  .showcasedot{width:9px;height:9px;border-radius:50%;display:inline-block;}
  .showcaseurl{margin-left:10px;color:#c3d2df;font-size:.72rem;font-family:var(--font-mono);letter-spacing:.02em;}
  .showcasetabs{display:flex;gap:2px;background:var(--navy-2);padding:0 10px;overflow-x:auto;}
  .showcasetabs .stab{padding:9px 12px;font-size:.72rem;letter-spacing:.03em;text-transform:uppercase;color:#c3d2df;border-bottom:3px solid transparent;white-space:nowrap;}
  .showcasetabs .stab.active{color:#fff;border-bottom:3px solid var(--gold);}
  .showcasebody{padding:22px 20px;}
  .showcasesteps{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin-bottom:20px;}
  .sstep{display:flex;align-items:center;gap:6px;font-size:.72rem;color:var(--muted);white-space:nowrap;}
  .sstep .sdot{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;border:1px solid var(--line);font-size:.66rem;color:var(--muted);}
  .sstep.done{color:var(--green);}
  .sstep.done .sdot{background:var(--green-bg);border-color:var(--green);color:var(--green);}
  .sstep.active{color:var(--navy);font-weight:600;}
  .sstep.active .sdot{background:var(--gold);border-color:var(--gold);color:#fff;}
  .sline{flex:0 0 18px;height:1px;background:var(--line);}
  .sline.done{background:var(--green);}
  @media(max-width:640px){.showcasesteps{display:none;}}
  .showcaserows{border:1px solid var(--line);}
  .srow{display:flex;justify-content:space-between;align-items:center;padding:11px 14px;font-size:.85rem;color:var(--ink);border-bottom:1px solid var(--line);}
  .srow:last-child{border-bottom:none;}

  .aboutblock{padding:50px 0;}
  .aboutblock h2{color:var(--navy);font-size:1.6rem;border-bottom:2px solid var(--gold);padding-bottom:10px;}
  .aboutcompany{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:24px 26px;margin:20px 0;}
  .aboutcompany h3{color:var(--navy);margin:0 0 8px;}
  .aboutcompany p{color:var(--muted);font-size:.92rem;margin:0 0 10px;}
  .aboutcompany .ventures{font-size:.84rem;color:var(--muted);}
  .aboutcompany .ventures a{margin-right:10px;}
  .companygrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px;margin:16px 0 30px;}
  .companycard{background:var(--panel);border:1px solid var(--line);clip-path:polygon(8px 0,100% 0,100% calc(100% - 8px),calc(100% - 8px) 100%,0 100%,0 8px);padding:16px 18px;}
  .companycard h4{margin:0 0 6px;color:var(--navy);font-size:.9rem;}
  .companycard p{margin:0 0 8px;color:var(--muted);font-size:.8rem;line-height:1.45;}
  .companycard a{font-size:.78rem;}

  .contactblock{padding:50px 0;}
  .contactblock h2{color:var(--navy);font-size:1.6rem;border-bottom:2px solid var(--gold);padding-bottom:10px;}
  .contactgrid{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:24px;}
  @media(max-width:800px){.contactgrid{grid-template-columns:1fr;} .hero h1{font-size:1.8rem;}}
  .contactcards{display:flex;flex-direction:column;gap:16px;}

  header.site{background:linear-gradient(135deg,var(--navy) 0%,var(--navy-3) 100%);color:#fff;padding:20px 5vw 16px;border-bottom:4px solid var(--gold);background-image:linear-gradient(135deg,var(--navy) 0%,var(--navy-3) 100%),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='48'%3E%3Cpath d='M0 48 L24 0 L48 48 L72 0 L96 48' stroke='rgba(255,255,255,0.06)' stroke-width='1.3' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat,repeat-x;background-position:0 0,bottom left;}
  .brandrow{display:flex;justify-content:space-between;align-items:flex-start;flex-wrap:wrap;gap:16px;}
  .brand h1{margin:0;font-size:1.5rem;letter-spacing:.02em;font-weight:700;}
  .brand .sub{color:var(--gold-light);font-size:.78rem;letter-spacing:.09em;text-transform:uppercase;margin-top:4px;}
  .brand .partner{color:#c3d2df;font-size:.76rem;margin-top:7px;}
  .headercontact{font-size:.76rem;color:#c3d2df;text-align:right;line-height:1.6;}
  .headercontact a{color:#fff;text-decoration:none;border-bottom:1px solid rgba(255,255,255,.35);}
  .logoutbtn, .allclientsbtn{background:transparent;border:1px solid rgba(255,255,255,.4);color:#fff;font-family:var(--font-ui);font-size:.72rem;padding:5px 10px;border-radius:4px;cursor:pointer;margin-top:8px;margin-left:6px;}
  .whoami{font-size:.72rem;color:var(--gold-light);margin-top:4px;}

  /* ===== Portfolio (deal picker) ===== */
  #portfolioView{max-width:1100px;margin:0 auto;padding:36px 5vw 80px;}
  .portfolioHead{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:10px;margin-bottom:22px;}
  .portfolioHead h2{margin:0;color:var(--navy);font-size:1.5rem;}
  .dealgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;}
  .dealcard{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:20px;cursor:pointer;transition:box-shadow .15s, transform .15s;}
  .dealcard:hover{box-shadow:0 6px 18px rgba(15,36,56,.12);transform:translateY(-2px);}
  .dealcard .dtype{font-size:.66rem;text-transform:uppercase;letter-spacing:.07em;color:var(--gold);font-weight:bold;}
  .dealcard h3{margin:6px 0 4px;color:var(--navy);font-size:1.05rem;}
  .dealcard .dclient{color:var(--muted);font-size:.85rem;margin-bottom:10px;}
  .addcard{border:2px dashed #e2d8c5;display:flex;align-items:center;justify-content:center;flex-direction:column;color:var(--muted);text-align:center;min-height:150px;}
  .addcard:hover{border-color:var(--gold);color:var(--gold);}
  .addcard .plus{font-size:2rem;line-height:1;margin-bottom:6px;}
  .newdealform{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:20px;margin-top:18px;display:none;}
  .newdealform.open{display:block;}

  .dealbar{background:var(--navy-2);color:#fff;padding:10px 5vw;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;}
  .dealbar .dinfo{font-size:.84rem;}
  .dealbar .dinfo .dclientname{font-weight:bold;color:#fff;}
  .dealbar .dinfo .dtypebadge{font-size:.66rem;text-transform:uppercase;letter-spacing:.06em;background:var(--gold);color:#fff;padding:2px 8px;border-radius:10px;margin-left:8px;}
  .dealbar .dinfo .focusbadge{font-size:.66rem;text-transform:uppercase;letter-spacing:.06em;background:transparent;border:1px solid rgba(255,255,255,.5);color:#fff;padding:2px 8px;border-radius:10px;margin-left:6px;}

  .countbar{background:var(--navy-3);color:#fff;display:flex;align-items:center;justify-content:center;gap:22px;padding:10px 5vw;flex-wrap:wrap;border-bottom:1px solid rgba(255,255,255,.08);}
  .countbar .clabel{font-size:.74rem;text-transform:uppercase;letter-spacing:.08em;color:var(--gold-light);}
  .countunit{display:flex;flex-direction:column;align-items:center;min-width:52px;}
  .countunit .num{font-size:1.35rem;font-weight:bold;font-variant-numeric:tabular-nums;}
  .countunit .lbl{font-size:.62rem;text-transform:uppercase;letter-spacing:.08em;color:#c3d2df;}
  .countsep{font-size:1.2rem;color:var(--gold-light);}

  nav.tabs{display:flex;gap:2px;background:var(--navy-3);padding:0 5vw;overflow-x:auto;position:sticky;top:0;z-index:60;border-bottom:1px solid rgba(255,255,255,.1);}
  nav.tabs button{font-family:var(--font-ui);background:transparent;border:none;color:#c3d2df;padding:13px 15px;font-size:.78rem;letter-spacing:.03em;text-transform:uppercase;cursor:pointer;white-space:nowrap;border-bottom:3px solid transparent;transition:all .15s;}
  nav.tabs button:hover{color:#fff;}
  nav.tabs button.active{color:#fff;border-bottom:3px solid var(--gold);background:rgba(255,255,255,.05);}

  /* Admin Panel's own sub-nav, same visual language as nav.tabs above but a
     distinct selector on purpose: the deal workspace's tab switcher
     (search tabButtons/sections further down the inline script) captures
     `nav.tabs button` into a static NodeList once at parse time and wires
     it to `main section` panes specifically, reusing that exact class here
     would get these buttons silently swept into that unrelated listener. */
  nav.apnav{display:flex;gap:2px;background:var(--navy-3);padding:0 5vw;overflow-x:auto;position:sticky;top:0;z-index:60;border-bottom:1px solid rgba(255,255,255,.1);}
  nav.apnav button{font-family:var(--font-ui);background:transparent;border:none;color:#c3d2df;padding:13px 15px;font-size:.78rem;letter-spacing:.03em;text-transform:uppercase;cursor:pointer;white-space:nowrap;border-bottom:3px solid transparent;transition:all .15s;position:relative;}
  nav.apnav button:hover{color:#fff;}
  nav.apnav button.active{color:#fff;border-bottom:3px solid var(--gold);background:rgba(255,255,255,.05);}

  /* Daniel, 2026-09-04, UI/UX pass: the client Overview tab grew to 15+
     stacked cards (Live Status, Score, Funding, Deal Summary, Checklist
     progress, Next Steps, Calendar, plus several deal-specific one-off
     cards) with no way to jump between them except scrolling. This is a
     lightweight jump-nav, not a rebuild of the page into collapsible
     sections -- several of these cards toggle their own visibility based
     on deal data (see closingOverviewBody comment above), and layering a
     manual expand/collapse on top of that risked fighting that existing
     show/hide logic. Sticks just below nav.tabs (56px tall). */
  .overviewmininav{position:sticky;top:56px;z-index:40;display:flex;gap:4px;overflow-x:auto;background:var(--paper);border-bottom:1px solid var(--line);padding:8px 5vw;margin:0 -5vw 16px;}
  .overviewmininav a{font-family:var(--font-ui);font-size:.74rem;letter-spacing:.03em;text-transform:uppercase;color:var(--muted);white-space:nowrap;padding:6px 10px;border-radius:4px;text-decoration:none;transition:all .15s;}
  .overviewmininav a:hover{color:var(--navy);background:var(--rust-tint);}
  .ovnavanchor{scroll-margin-top:104px;}
  nav.apnav button .notif-badge{position:static;display:inline-block;margin-left:6px;}

  main{max-width:1180px;margin:0 auto;padding:32px 5vw 80px;}
  section{display:none;}
  section.active{display:block;animation:fade .2s ease;}
  @keyframes fade{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:none;}}

  h2.pagetitle{font-size:1.45rem;margin:0 0 6px;color:var(--navy);border-bottom:2px solid var(--gold);padding-bottom:10px;}
  .pagesub{color:var(--muted);font-size:.9rem;margin:0 0 22px;}
  .card{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:20px 22px;margin-bottom:16px;box-shadow:0 1px 2px rgba(0,0,0,.03);}
  .card h3{margin:0 0 12px;color:var(--navy);font-size:1rem;}
  .grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px;}
  .grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;}
  @media(max-width:720px){.grid2,.grid3{grid-template-columns:1fr;} .docroom{grid-template-columns:1fr !important;}}

  table{width:100%;border-collapse:collapse;font-size:.85rem;}
  table th{text-align:left;background:var(--navy);color:#fff;padding:8px 11px;font-weight:normal;letter-spacing:.03em;font-size:.7rem;text-transform:uppercase;}
  table td{padding:9px 11px;border-bottom:1px solid var(--line);vertical-align:top;}
  table tr:last-child td{border-bottom:none;}
  table tr:hover td{background:#fbfaf6;}
  /* Daniel, 2026-08-22 (UI/UX QA pass): the Admin Panel's All Deals table
     (renderAdminDeals(), #apDealsTable) puts a dealType and a dealstatus
     <select> directly in a table cell -- no CSS targeted selects inside a
     plain <table>, so both dropdowns rendered as bare unstyled browser
     controls next to an otherwise fully styled table. */
  table select{padding:5px 8px;border:1px solid #e2d8c5;border-radius:4px;font-family:var(--font-ui);font-size:.8rem;background:#fffefb;color:var(--ink);}

  .status{display:inline-block;font-size:.66rem;text-transform:uppercase;letter-spacing:.05em;padding:3px 9px;border-radius:20px;font-weight:bold;white-space:nowrap;}
  .status.done{background:var(--green-bg);color:var(--green);}
  .status.pending{background:var(--amber-bg);color:var(--amber);}
  .status.wait{background:var(--red-bg);color:var(--red);}
  .status.na{background:#ececec;color:#7a7a7a;}
  .status.tbd{background:var(--blue-bg);color:var(--blue);}

  .party{display:inline-block;font-size:.66rem;background:#f1ede1;color:#6b5c2e;border:1px solid #ddd0a6;padding:2px 7px;border-radius:3px;margin-right:3px;}
  .note{background:#fbf3e3;border:1px solid #ecd9ab;border-radius:5px;padding:13px 15px;font-size:.84rem;color:#6b4e12;margin:16px 0;}
  .note.blue{background:var(--blue-bg);border-color:#c7d6ec;color:var(--blue);}
  .note.red{background:var(--red-bg);border-color:#e0b6b0;color:var(--red);}

  .partycard{border-left:4px solid var(--gold);}
  .role{font-size:.68rem;text-transform:uppercase;letter-spacing:.08em;color:var(--gold);font-weight:bold;margin-bottom:4px;}
  .name{font-weight:bold;font-size:1rem;color:var(--navy);}
  .title{color:var(--muted);font-size:.85rem;margin-bottom:6px;}
  .contactline{font-size:.86rem;margin:2px 0;}

  .instrumentgrid{display:grid;grid-template-columns:1fr 1fr;gap:14px;}
  @media(max-width:900px){.instrumentgrid{grid-template-columns:1fr;}}
  .instrument{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:16px 18px;position:relative;}
  .instrument .exlabel{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:var(--gold);font-weight:bold;}
  .instrument h4{margin:4px 0 8px;color:var(--navy);font-size:1rem;}
  .instrument .badges{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0 12px;}
  .instrument .actions{display:flex;gap:8px;flex-wrap:wrap;}

  .docroom{display:grid;grid-template-columns:270px 1fr;gap:20px;align-items:start;}
  .foldernav{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:10px;position:sticky;top:56px;max-height:70vh;overflow-y:auto;}
  .foldernav .grouplabel{font-size:.66rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);padding:10px 8px 4px;}
  .folderbtn{display:flex;justify-content:space-between;align-items:center;width:100%;text-align:left;background:none;border:none;padding:9px 10px;border-radius:4px;cursor:pointer;font-family:var(--font-ui);font-size:.82rem;color:var(--ink);}
  .folderbtn:hover{background:#ece4d2;}
  .folderbtn.active{background:var(--navy);color:#fff;}
  .folderbtn .count{font-size:.66rem;color:var(--muted);}
  .folderbtn.active .count{color:#c3d2df;}
  .docpanel{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:20px;min-height:260px;}
  .docpanel h3{margin:0 0 4px;color:var(--navy);font-size:1.1rem;}
  .docpanel .folderdesc{color:var(--muted);font-size:.83rem;margin-bottom:14px;}

  ol.steps{padding-left:20px;}
  ol.steps li{margin-bottom:14px;}
  ol.steps li strong{color:var(--navy);}

  form.signform, form.fundform{display:flex;flex-direction:column;gap:14px;}
  form label, .fieldlabel{font-size:.78rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;display:block;margin-bottom:4px;}
  form input, form select{width:100%;padding:9px 10px;border:1px solid #e2d8c5;border-radius:4px;font-family:var(--font-ui);font-size:.9rem;background:#fffefb;}
  canvas#padCanvas{border:1px dashed #e2d8c5;border-radius:4px;background:#fffefb;touch-action:none;cursor:crosshair;width:100%;max-width:420px;height:140px;}
  .padrow{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:6px;}
  /* Daniel, 2026-08-20: re-skin -- chamfered corner on every button
     everywhere in the app (portal included), unlike the card treatment
     above this one IS applied globally: button.btn is one small, well-
     defined ruleset used consistently through the whole file, so this is
     low-risk and high-visual-impact, exactly the kind of change item #2
     in the strategy calls for. */
  button.btn{font-family:var(--font-ui);background:var(--navy);color:#fff;border:none;padding:9px 18px;clip-path:polygon(6px 0,100% 0,100% calc(100% - 6px),calc(100% - 6px) 100%,0 100%,0 6px);cursor:pointer;font-size:.85rem;letter-spacing:.03em;transition:background .15s;}
  button.btn:hover{background:var(--navy-2);}
  button.btn.gold{background:var(--gold);color:#fff;}
  button.btn.gold:hover{background:var(--gold-light);}
  button.btn.ghost{background:transparent;color:var(--navy);border:1px solid var(--navy);}
  button.btn.small{padding:6px 12px;font-size:.76rem;}
  .agreecheck{display:flex;align-items:flex-start;gap:8px;font-size:.82rem;color:var(--muted);}
  .siglog table td.sigimg img{height:34px;border:1px solid var(--line);border-radius:3px;background:#fff;}

  footer.site{background:var(--navy);color:#c3d2df;padding:28px 5vw 20px;font-size:.78rem;}
  footer.site a{color:#fff;text-decoration:none;}
  footer.site a:hover{text-decoration:underline;}
  .footergrid{display:grid;grid-template-columns:1.3fr 1.3fr 1fr;gap:28px;padding-bottom:18px;border-bottom:1px solid rgba(255,255,255,.12);margin-bottom:14px;}
  @media(max-width:860px){.footergrid{grid-template-columns:1fr 1fr;}}
  @media(max-width:520px){.footergrid{grid-template-columns:1fr;}}
  .footercol h4{margin:0 0 10px;color:#fff;font-size:.82rem;letter-spacing:.05em;text-transform:uppercase;}
  .footercol .fline{margin:3px 0;color:#c3d2df;}
  .footerbottom{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;align-items:center;}
  .socials a{margin-left:10px;color:#fff;text-decoration:none;}

  .progressbar{height:8px;background:#e2d8c5;border-radius:6px;overflow:hidden;margin:10px 0 4px;}
  .progressbar > div{height:100%;background:linear-gradient(90deg,var(--gold),var(--gold-light));}
  .progresslabel{font-size:.74rem;color:var(--muted);display:flex;justify-content:space-between;}

  .modalback{display:none;position:fixed;inset:0;background:rgba(15,36,56,.72);z-index:700;align-items:center;justify-content:center;padding:24px;}
  .modalback.open{display:flex;}
  .modalbox{background:#fff;clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px);width:min(940px,100%);max-height:92vh;display:flex;flex-direction:column;overflow:hidden;}
  .modalhead{display:flex;justify-content:space-between;align-items:center;padding:14px 18px;background:var(--navy);color:#fff;}
  .modalhead h4{margin:0;font-size:.95rem;}
  .modalhead button{background:transparent;border:1px solid rgba(255,255,255,.5);color:#fff;border-radius:4px;padding:4px 10px;cursor:pointer;font-family:var(--font-ui);}
  .modalbox iframe{flex:1;width:100%;height:75vh;border:none;}

  /* Help Desk's own sub-tabs inside its modal (FAQ / Submit a Ticket / My
     Tickets / All Tickets), same visual language as nav.apnav but sized
     for a modal rather than a full-width header bar. */
  .hdsubtab{font-family:var(--font-ui);background:transparent;border:none;color:var(--muted);padding:11px 13px;font-size:.74rem;letter-spacing:.03em;text-transform:uppercase;cursor:pointer;white-space:nowrap;border-bottom:3px solid transparent;transition:all .15s;}
  .hdsubtab:hover{color:var(--navy);}
  .hdsubtab.active{color:var(--navy);border-bottom:3px solid var(--gold);font-weight:bold;}
  .hdticket{border:1px solid var(--line);border-radius:6px;padding:14px 16px;margin-bottom:12px;}
  .hdticket .hdreply{background:#f7f6f1;border-radius:6px;padding:8px 10px;margin-top:8px;font-size:.82rem;}

  .fieldlist{list-style:none;padding:0;margin:0;font-size:.8rem;color:var(--muted);}
  .fieldlist li{padding:3px 0;}
  .fieldlist li:before{content:"• ";color:var(--gold);}

  .maskrow{display:flex;gap:8px;align-items:center;}
  .maskrow input{flex:1;}
  .emptystate{color:var(--muted);font-size:.86rem;padding:14px 0;}

  /* ===== Pipeline stepper ===== */
  .stepper{display:flex;align-items:flex-start;overflow-x:auto;padding-top:4px;}
  .step{flex:1;min-width:108px;text-align:center;position:relative;padding:0 4px;}
  .step .dot{width:26px;height:26px;border-radius:50%;background:#e2d8c5;color:var(--muted);display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:bold;margin:0 auto 8px;position:relative;z-index:2;border:2px solid #e2d8c5;}
  .step .line{position:absolute;top:13px;left:-50%;width:100%;height:2px;background:#e2d8c5;z-index:1;}
  .step:first-child .line{display:none;}
  .step .slabel{font-size:.66rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;line-height:1.3;}
  .step.done .dot{background:var(--green);border-color:var(--green);color:#fff;}
  .step.done .line{background:var(--green);}
  .step.current .dot{background:var(--gold);border-color:var(--gold);color:#fff;}
  .step.current .slabel{color:var(--navy);font-weight:bold;}
  .step.declined .dot{background:var(--red);border-color:var(--red);color:#fff;}

  /* ===== Closing Calendar timeline (interactive, replaces the static process note) ===== */
  .calendarline{display:flex;align-items:flex-start;overflow-x:auto;padding-top:6px;}
  .calnode{flex:1;min-width:118px;text-align:center;position:relative;padding:0 6px;cursor:pointer;}
  .calnode .calline{position:absolute;top:16px;left:-50%;width:100%;height:2px;background:#e2d8c5;z-index:1;}
  .calnode:first-child .calline{display:none;}
  .caldot{width:30px;height:30px;border-radius:50%;background:#e2d8c5;color:var(--muted);display:flex;align-items:center;justify-content:center;font-size:.76rem;font-weight:bold;margin:0 auto 8px;position:relative;z-index:2;border:2px solid #e2d8c5;transition:transform .15s ease;}
  .calnode:hover .caldot{transform:scale(1.1);}
  .callabel{font-size:.66rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;line-height:1.3;}
  .calsub{font-size:.72rem;color:var(--navy);font-weight:700;margin-top:3px;font-variant-numeric:tabular-nums;}
  .calnode.done .caldot{background:var(--green);border-color:var(--green);color:#fff;}
  .calnode.done .calline{background:var(--green);}
  .calnode.current .caldot{background:var(--gold);border-color:var(--gold);color:#fff;animation:calpulse 1.8s infinite;}
  .calnode.current .callabel{color:var(--navy);font-weight:bold;}
  .calnode.current .calsub{color:var(--gold);}
  .calnode.future .caldot{background:#fff;border-color:var(--navy-2);color:var(--navy-2);}
  .calnode.pending .caldot{background:#fff;border:2px dashed #e2d8c5;color:#e2d8c5;}
  .calnode.pending .calsub{color:#a9a08a;font-style:italic;font-weight:400;}
  @keyframes calpulse{0%,100%{box-shadow:0 0 0 0 rgba(181,89,31,.45);}50%{box-shadow:0 0 0 7px rgba(181,89,31,0);}}

  /* Daniel, 2026-09-04, UI/UX pass ("stunning graphics" for Fortress/MGCH):
     opt-in dark mission-control variant of the Closing Calendar, applied
     only for SEED_ID/MGCH_ID (see renderClosingCalendar()'s isFlagship
     toggle) rather than changing this shared component's look for every
     deal. Reuses the same navy-gradient/cyan-glow language as
     .fundinggraphic-mc and .finalqacard so all three flagship-only
     graphics read as one family. */
  .calendarline-mc{background:linear-gradient(135deg,var(--navy) 0%,var(--navy-2) 100%);border-radius:12px;padding:20px 14px 8px;box-shadow:0 0 34px rgba(79,227,255,.18),0 8px 24px rgba(15,36,56,.25);}
  .calendarline-mc .calnode .calline{background:rgba(255,255,255,.16);}
  .calendarline-mc .caldot{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.26);color:#9fb3c4;}
  .calendarline-mc .callabel{color:#9fb3c4;}
  .calendarline-mc .calsub{color:#cbd6e2;}
  .calendarline-mc .calnode.done .caldot{background:var(--ls-cyan);border-color:var(--ls-cyan);color:var(--navy);box-shadow:0 0 10px 1px rgba(79,227,255,.65);}
  .calendarline-mc .calnode.done .calline{background:var(--ls-cyan);}
  .calendarline-mc .calnode.current .caldot{background:var(--gold);border-color:var(--gold);color:#fff;animation:calpulsemc 1.8s infinite;}
  .calendarline-mc .calnode.current .callabel{color:#fff;}
  .calendarline-mc .calnode.current .calsub{color:var(--gold-light);}
  .calendarline-mc .calnode.future .caldot{background:transparent;border-color:#4a5f74;color:#9fb3c4;}
  .calendarline-mc .calnode.pending .caldot{background:transparent;border:2px dashed #3d5064;color:#3d5064;}
  .calendarline-mc .calnode.pending .calsub{color:#7189a0;}
  @keyframes calpulsemc{0%,100%{box-shadow:0 0 0 0 rgba(79,227,255,.5);}50%{box-shadow:0 0 0 7px rgba(79,227,255,0);}}

  /* ===== Portfolio stats ===== */
  .statsrow{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:14px;margin-bottom:22px;}
  .statcard{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:16px 18px;}
  .statcard .snum{font-size:1.5rem;font-weight:bold;color:var(--navy);}
  .statcard .slabel{font-size:.7rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-top:2px;}

  /* ===== Activity feed / Next steps ===== */
  .feedlist{list-style:none;margin:0;padding:0;max-height:320px;overflow-y:auto;}
  .feedlist li{display:flex;gap:10px;padding:10px 0;border-bottom:1px solid var(--line);font-size:.82rem;}
  .feedlist li:last-child{border-bottom:none;}
  .feedlist .ftime{color:var(--muted);font-size:.68rem;white-space:nowrap;min-width:118px;}
  .nextsteps{list-style:none;margin:0;padding:0;max-height:320px;overflow-y:auto;}
  .nextsteps li{display:flex;align-items:flex-start;gap:10px;padding:10px 0;border-bottom:1px solid var(--line);font-size:.85rem;}
  .nextsteps li:last-child{border-bottom:none;}
  .nextsteps .nsicon{color:var(--gold);font-size:.95rem;line-height:1.4;}

  /* ===== Draw requests ===== */
  .drawgrid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:16px;}
  @media(max-width:720px){.drawgrid{grid-template-columns:1fr;}}
  .drawcard{background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:16px 18px;}
  .drawcard .damt{font-size:1.2rem;font-weight:bold;color:var(--navy);}
  .drawcard .dpurpose{color:var(--muted);font-size:.85rem;margin:4px 0 10px;}
  .drawcard .dmeta{font-size:.72rem;color:var(--muted);margin-bottom:10px;}

  .duebadge{font-size:.68rem;color:var(--red);margin-left:8px;white-space:nowrap;}
  .duebadge.ok{color:var(--muted);}

  /* Daniel, 2026-08-20: "Verification Requests" -- a client names a 3rd
     party (a land seller, title company, etc.) who needs proof Kaufman &
     Company / Lonestar Kaufman can cover the deal's funding, certifies
     liability, and it lands with Financial to fill out and send. "in the
     front end to the client/partner this will look very hightech and
     automated" -- status pills with an animated pending indicator (same
     pulse keyframe as the investment ticker's live dot) rather than a
     plain table row, and the request form reads like a structured intake
     wizard rather than a bare form. */
  .vofrow{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:16px 18px;margin-bottom:14px;position:relative;}
  .vofrow .vofrowhead{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;}
  .vofrow .vofrowhead strong{color:var(--navy);font-size:.92rem;}
  /* Daniel, 2026-08-22 (UI/UX QA pass): "the add another deal function
     looks off" -- every .vofrow (Verification Requests' addVofRow(), and
     the Submit-a-Deal / Add Another Opportunity rows in both #prospectView
     and #clientOppModal that deliberately mirror it, addOppRow()/
     addCoRow()) builds its inputs/selects/textarea as plain <div>s, not
     inside a <form> element -- so the "form input, form select" rule
     above never applied and every field in these rows was rendering as an
     unstyled bare browser control next to an otherwise fully styled card.
     Scoping the same look directly to .vofrow fixes all three call sites
     at once without requiring a <form> wrapper (which would need real
     submit-handling changes) and without touching any other input on the
     page. */
  .vofrow input:not([type=checkbox]):not([type=radio]),
  .vofrow select,
  .vofrow textarea{width:100%;padding:9px 10px;border:1px solid #e2d8c5;border-radius:4px;font-family:var(--font-ui);font-size:.9rem;background:#fffefb;}
  .vofrow textarea{resize:vertical;min-height:56px;font:inherit;}
  .vofcertify{background:var(--paper-deep,#ece4d2);border:1px solid var(--line);border-radius:8px;padding:16px 18px;margin-top:16px;}
  .vofcertify label.vofcheck{display:flex;gap:10px;align-items:flex-start;cursor:pointer;}
  .vofcertify label.vofcheck input{margin-top:3px;flex-shrink:0;}
  .vofcertify .voflegal{font-size:.8rem;color:var(--ink);line-height:1.5;}

  .vofhistcard{background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:14px 18px;margin-bottom:10px;display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;}
  .vofhistmain{flex:1;min-width:200px;}
  .vofhistmain .vhname{color:var(--navy);font-weight:600;font-size:.92rem;}
  .vofhistmain .vhmeta{font-size:.76rem;color:var(--muted);margin-top:2px;}
  .vofpill{display:inline-flex;align-items:center;gap:6px;font-size:.72rem;font-weight:600;letter-spacing:.03em;text-transform:uppercase;padding:5px 12px;border-radius:20px;white-space:nowrap;}
  .vofpill.pending{background:var(--amber-bg);color:var(--amber);}
  .vofpill.pending .vofdot{width:6px;height:6px;border-radius:50%;background:var(--amber);animation:pulse 1.4s ease-in-out infinite;}
  .vofpill.sent{background:var(--green-bg);color:var(--green);}
  .vofpill.declined{background:var(--red-bg);color:var(--red);}
  .vofempty{text-align:center;padding:28px;color:var(--muted);font-size:.85rem;}

  /* ===== Available funding graphic ===== */
  .fundinggraphic{display:flex;gap:28px;align-items:center;flex-wrap:wrap;}
  .fundgauge{flex-shrink:0;}
  .fundmain{flex:1;min-width:220px;}
  .fundlabel{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);}
  .fundbig{font-size:2.3rem;font-weight:bold;color:var(--navy);line-height:1.15;font-variant-numeric:tabular-nums;}
  .fundsub{font-size:.82rem;color:var(--muted);margin-top:2px;}
  .fundstats{display:flex;gap:22px;margin-top:14px;flex-wrap:wrap;}
  .fundstat .n{font-size:1.05rem;font-weight:bold;color:var(--navy);font-variant-numeric:tabular-nums;}
  .fundstat .l{font-size:.68rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);}
  .fgring{transition:stroke-dashoffset 1.1s cubic-bezier(.4,0,.2,1);}
  @media(max-width:600px){.fundinggraphic{flex-direction:column;align-items:flex-start;}}
  /* Daniel, 2026-09-04, UI/UX pass ("stunning... graphics" for
     Fortress/MGCH specifically): the plain orange/navy ring above sat
     visually disconnected from the cyan/gold Live Status mission-control
     view right above it on the same page. This "-mc" (mission control)
     variant is applied only for Fortress/MGCH (see renderFundingGraphic()),
     reusing the exact dark navy gradient card already established for
     .readinesswrap above rather than inventing a third dark style, with
     the ring recolored to --ls-cyan and the same glow .lsbiggauge uses, so
     it reads as the same design family as Live Status, not a new one. */
  .fundinggraphic-mc{background:linear-gradient(135deg,var(--navy) 0%,var(--navy-2) 100%);border-radius:12px;padding:22px 24px;box-shadow:0 0 34px rgba(79,227,255,.18),0 8px 24px rgba(15,36,56,.25);}
  .fundinggraphic-mc .fundlabel{color:#9fb3c4;}
  .fundinggraphic-mc .fundbig{color:#fff;}
  .fundinggraphic-mc .fundsub{color:#9fb3c4;}
  .fundinggraphic-mc .fundstat .n{color:#fff;}
  .fundinggraphic-mc .fundstat .l{color:#9fb3c4;}

  /* ===== Guided session modal (notary, bank connect, wire, payment, closing) ===== */
  .simbox{width:min(600px,100%);}
  .simbody{padding:24px 26px 26px;overflow-y:auto;max-height:78vh;}
  .simsteps{display:flex;gap:6px;margin-bottom:20px;}
  .simsteps .sdot{flex:1;height:4px;border-radius:3px;background:#e2d8c5;}
  .simsteps .sdot.on{background:var(--gold);}
  .simh{color:var(--navy);font-size:1.05rem;margin:0 0 6px;}
  .simp{color:var(--muted);font-size:.86rem;margin:0 0 16px;line-height:1.5;}
  .spinner{width:34px;height:34px;border:3px solid #e2d8c5;border-top-color:var(--gold);border-radius:50%;animation:spin .8s linear infinite;margin:18px auto;}
  @keyframes spin{to{transform:rotate(360deg);}}
  .simcenter{text-align:center;padding:20px 0;}
  .idscanbox{border:2px dashed #e2d8c5;border-radius:8px;padding:28px;text-align:center;color:var(--muted);font-size:.85rem;cursor:pointer;transition:border-color .15s;}
  .idscanbox:hover{border-color:var(--gold);}
  .idscanbox .idicon{font-size:1.8rem;margin-bottom:8px;}
  .kbaq{background:#fbfaf6;border:1px solid var(--line);border-radius:6px;padding:14px 16px;margin-bottom:12px;}
  .kbaq .qtext{font-size:.86rem;color:var(--ink);margin-bottom:8px;font-weight:bold;}
  .kbaopt{display:block;font-size:.84rem;padding:6px 0;cursor:pointer;}
  .videocall{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;}
  @media(max-width:520px){.videocall{grid-template-columns:1fr;}}
  .videopane{background:var(--navy);border-radius:8px;aspect-ratio:4/3;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#fff;position:relative;overflow:hidden;}
  .videopane .avatar{width:52px;height:52px;border-radius:50%;background:var(--gold);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:bold;font-size:1.1rem;margin-bottom:8px;}
  .videopane .vname{font-size:.76rem;color:#c3d2df;}
  .videopane .vbadge{position:absolute;top:8px;left:8px;background:rgba(255,255,255,.15);color:#fff;font-size:.62rem;padding:2px 7px;border-radius:10px;text-transform:uppercase;letter-spacing:.05em;}
  .notarybubble{background:var(--blue-bg);border:1px solid #c7d6ec;border-radius:8px;padding:12px 14px;font-size:.85rem;color:var(--blue);margin-bottom:14px;}
  .certcard{background:#fffefb;border:2px solid var(--gold);border-radius:8px;padding:20px 22px;text-align:center;}
  .certcard .cseal{width:48px;height:48px;margin:0 auto 10px;border-radius:50%;border:2px solid var(--gold);display:flex;align-items:center;justify-content:center;color:var(--navy);font-size:1.35rem;font-weight:700;}
  .certcard h4{color:var(--navy);margin:0 0 4px;}
  .certcard .cline{font-size:.82rem;color:var(--muted);margin:2px 0;}
  .bankgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;}
  @media(max-width:480px){.bankgrid{grid-template-columns:repeat(2,1fr);}}
  .bankcard{border:1px solid var(--line);border-radius:8px;padding:16px 8px;text-align:center;cursor:pointer;background:var(--panel);transition:box-shadow .15s,border-color .15s;}
  .bankcard:hover{border-color:var(--gold);box-shadow:0 4px 12px rgba(15,36,56,.1);}
  .bankcard .binit{width:38px;height:38px;border-radius:8px;margin:0 auto 8px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:bold;font-size:.85rem;}
  .bankcard .bname{font-size:.74rem;color:var(--ink);}
  .processchain{list-style:none;padding:0;margin:0 0 16px;}
  .processchain li{display:flex;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--line);font-size:.86rem;color:var(--muted);}
  .processchain li:last-child{border-bottom:none;}
  .processchain li.done{color:var(--ink);}
  .processchain .pdot{width:20px;height:20px;border-radius:50%;background:#e2d8c5;display:flex;align-items:center;justify-content:center;font-size:.68rem;flex-shrink:0;}
  .processchain li.done .pdot{background:var(--green);color:#fff;}
  .processchain li.active .pdot{background:var(--gold);}
  .refbox{background:#fbfaf6;border:1px solid var(--line);border-radius:6px;padding:10px 14px;font-family:monospace;font-size:.8rem;color:var(--navy);margin-top:10px;word-break:break-all;}

  /* ===== Gamified onboarding: readiness gauge, milestones, dropzone, trail, celebrations ===== */
  .readinesswrap{display:flex;align-items:center;gap:24px;flex-wrap:wrap;padding:22px 24px;background:linear-gradient(135deg,var(--navy) 0%,var(--navy-2) 100%);border-radius:12px;color:#fff;margin-bottom:18px;box-shadow:0 8px 24px rgba(15,36,56,.25);}
  .gauge{--pct:0;width:96px;height:96px;border-radius:50%;background:conic-gradient(var(--gold) calc(var(--pct)*1%),rgba(255,255,255,.15) 0);display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;transition:background 1s cubic-bezier(.4,0,.2,1);}
  .gauge::before{content:'';position:absolute;inset:8px;border-radius:50%;background:var(--navy-2);}
  .gauge .gnum{position:relative;font-size:1.3rem;font-weight:bold;color:#fff;text-align:center;}
  .gauge .gnum small{display:block;font-size:.58rem;color:var(--gold-light);text-transform:uppercase;letter-spacing:.05em;font-weight:normal;margin-top:2px;}
  .readinesstext{flex:1;min-width:200px;}
  .readinesstext h3{margin:0 0 4px;font-size:1.05rem;color:#fff;}
  .readinesstext p{margin:0;font-size:.82rem;color:#c3d2df;}
  .milestonerow{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px;}
  .milestonechip{display:flex;align-items:center;gap:7px;padding:7px 13px;border-radius:20px;font-size:.78rem;cursor:pointer;transition:transform .15s ease,box-shadow .15s ease;border:1px solid transparent;background:none;font-family:var(--font-ui);}
  .milestonechip:hover{transform:translateY(-1px);}
  .milestonechip.locked{background:rgba(255,255,255,.08);color:#9fb3c4;}
  .milestonechip.active{background:rgba(181,89,31,.18);color:var(--gold-light);border-color:var(--gold);}
  .milestonechip.done{background:rgba(46,125,79,.22);color:#8fd6ad;}
  .milestonechip .micon{width:16px;height:16px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.62rem;flex-shrink:0;background:rgba(255,255,255,.15);}
  .milestonechip.done .micon{background:var(--green);color:#fff;}
  .milestonechip.active .micon{background:var(--gold);color:#fff;}

  /* ===== Live Status launch button: sits above the Readiness Widget on
     the Dashboard, opens the full-screen mission-control overlay below.
     Kept in the site's institutional navy/gold palette (not neon) so it
     reads as a real product feature, the "high tech" feeling instead
     comes from what happens after the click. ===== */
  .livestatus-launchwrap{margin-bottom:14px;}
  .livestatus-launchbtn{width:100%;display:flex;align-items:center;gap:14px;background:linear-gradient(135deg,var(--navy) 0%,var(--navy-2) 100%);border:1px solid rgba(181,89,31,.4);border-radius:10px;padding:14px 18px;cursor:pointer;text-align:left;font-family:var(--font-ui);transition:transform .15s ease,box-shadow .15s ease,border-color .15s ease;box-shadow:0 0 0 0 rgba(181,89,31,.35);}
  .livestatus-launchbtn:hover{transform:translateY(-1px);border-color:var(--gold);box-shadow:0 4px 18px rgba(15,36,56,.28);}
  .ls-launchicon{position:relative;width:34px;height:34px;border-radius:50%;background:rgba(79,227,255,.12);border:1px solid rgba(79,227,255,.5);display:flex;align-items:center;justify-content:center;flex-shrink:0;}
  .ls-launchdot{width:9px;height:9px;border-radius:50%;background:var(--ls-cyan);box-shadow:0 0 8px 2px rgba(79,227,255,.7);animation:lsdotpulse 1.6s ease-in-out infinite;}
  @keyframes lsdotpulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.5;transform:scale(1.3);}}
  .ls-launchtext{flex:1;display:flex;flex-direction:column;gap:1px;}
  .ls-launchtext strong{color:#fff;font-size:.94rem;letter-spacing:.01em;}
  .ls-launchtext small{color:#9fb3c4;font-size:.76rem;}
  .ls-launcharrow{color:var(--gold-light);font-size:1.1rem;flex-shrink:0;}
  .ls-launchicon.ce-icon{background:rgba(232,160,92,.15);border-color:rgba(232,160,92,.55);}
  .ls-launchdot.ce-dot{background:var(--gold-light);box-shadow:0 0 8px 2px rgba(232,160,92,.7);}

  /* ===== Live Status full-screen mission-control overlay, see
     openLiveStatusView()/closeLiveStatusView() in the script below. Two
     phases: a brief (~2.5s) "scanning" intro (.lsscanstage) that never
     fabricates data, it's a pure loading animation while the real
     requests are in flight, then the dashboard itself (.lsdash), built
     from computeReadinessMilestones() (the same function
     renderReadinessWidget() uses) and the same /auth-deal-score endpoint
     the BridgeStar Score card uses. ===== */
  .lsoverlay{display:none;position:fixed;inset:0;z-index:900;background:radial-gradient(ellipse at 50% 0%,#132a4d 0%,var(--navy) 55%,#060f1f 100%);color:#fff;overflow-y:auto;}
  .lsoverlay.open{display:block;}
  .lsoverlay::before{content:'';position:fixed;inset:0;pointer-events:none;background:repeating-linear-gradient(0deg,rgba(255,255,255,.025) 0px,rgba(255,255,255,.025) 1px,transparent 1px,transparent 3px);mix-blend-mode:overlay;}
  .lsscanstage{position:relative;min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:22px;}
  .lsscanring{width:180px;height:180px;border-radius:50%;border:2px solid rgba(79,227,255,.35);position:relative;}
  .lsscanring::before{content:'';position:absolute;inset:-2px;border-radius:50%;border:2px solid transparent;border-top-color:var(--ls-cyan);animation:lsspin 1.1s linear infinite;}
  .lsscanring2{position:absolute;width:260px;height:260px;border-color:rgba(181,89,31,.25);}
  .lsscanring2::before{border-top-color:var(--gold-light);animation-duration:1.8s;animation-direction:reverse;}
  @keyframes lsspin{to{transform:rotate(360deg);}}
  .lsscanlabel{font-family:var(--font-ui);font-size:.78rem;letter-spacing:.18em;text-transform:uppercase;color:var(--ls-cyan);animation:lsflicker 1.4s ease-in-out infinite;}
  @keyframes lsflicker{0%,100%{opacity:1;}45%{opacity:.55;}55%{opacity:1;}}
  .lsscanlines{width:min(420px,84vw);display:flex;flex-direction:column;gap:6px;font-family:'Courier New',monospace;font-size:.74rem;color:#8fb8cc;min-height:132px;}
  .lsscanline{opacity:0;transform:translateX(-6px);animation:lslinein .35s ease forwards;display:flex;justify-content:space-between;gap:10px;}
  @keyframes lslinein{to{opacity:1;transform:none;}}
  .lsscanline .lsok{color:var(--ls-cyan);}
  .lsdash{max-width:1080px;margin:0 auto;padding:36px 28px 60px;animation:lsdashin .5s ease both;}
  @keyframes lsdashin{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:none;}}
  .lshead{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:26px;padding-bottom:18px;border-bottom:1px solid rgba(255,255,255,.12);}
  .lseyebrow{font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;color:var(--ls-cyan);margin-bottom:4px;}
  .lshead h2{margin:0;font-family:var(--font-display);font-size:1.5rem;color:#fff;}
  .lstimestamp{font-size:.78rem;color:#9fb3c4;margin-top:6px;font-family:'Courier New',monospace;}
  .lsclosebtn{background:transparent;border:1px solid rgba(255,255,255,.35);color:#fff;border-radius:6px;padding:8px 14px;cursor:pointer;font-family:var(--font-ui);font-size:.82rem;flex-shrink:0;}
  .lsclosebtn:hover{border-color:var(--gold);color:var(--gold-light);}
  .lsgrid{display:grid;grid-template-columns:1.3fr 1fr;gap:22px;margin-bottom:26px;}
  @media (max-width:760px){.lsgrid{grid-template-columns:1fr;}}
  .lsbigpanel{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:28px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;}
  .lsbiggauge{--pct:0;width:180px;height:180px;border-radius:50%;background:conic-gradient(var(--ls-cyan) calc(var(--pct)*1%),rgba(255,255,255,.08) 0);display:flex;align-items:center;justify-content:center;position:relative;margin-bottom:6px;transition:background 1.1s cubic-bezier(.4,0,.2,1);box-shadow:0 0 34px rgba(79,227,255,.28);}
  .lsbiggauge::before{content:'';position:absolute;inset:12px;border-radius:50%;background:#0f2438;}
  .lsbiggaugenum{position:relative;font-size:2.1rem;font-weight:700;color:#fff;font-family:var(--font-display);}
  .lsphase{font-size:1.15rem;font-weight:600;color:#fff;}
  .lsphasesub{font-size:.84rem;color:#9fb3c4;max-width:340px;}
  .lssidepanel{display:flex;flex-direction:column;gap:16px;}
  .lsscorewrap{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:18px;display:flex;align-items:center;gap:16px;}
  .lsscoregauge{--pct:0;--sgcolor:var(--gold);width:64px;height:64px;border-radius:50%;background:conic-gradient(var(--sgcolor) calc(var(--pct)*1%),rgba(255,255,255,.1) 0);display:flex;align-items:center;justify-content:center;position:relative;flex-shrink:0;transition:background 1.1s cubic-bezier(.4,0,.2,1);}
  .lsscoregauge::before{content:'';position:absolute;inset:7px;border-radius:50%;background:#0f2438;}
  .lsscorenum{position:relative;font-size:1.15rem;font-weight:700;color:#fff;font-family:var(--font-display);}
  .lsscorelabel{font-size:.82rem;color:#c3d2df;}
  .lsreadouts{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:16px 18px;display:flex;flex-direction:column;gap:11px;}
  .lsreadout{display:flex;justify-content:space-between;align-items:center;font-size:.82rem;gap:10px;}
  .lsreadout .lsrlabel{color:#9fb3c4;}
  .lsreadout .lsrval{color:#fff;font-weight:600;font-family:'Courier New',monospace;font-size:.8rem;text-align:right;}
  .lsreadout .lsrval.pending{color:#9fb3c4;font-weight:400;font-style:italic;}
  .lsmilestones{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:14px;}
  .lsms{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:8px;position:relative;overflow:hidden;}
  .lsms::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:rgba(255,255,255,.15);}
  .lsms.done::before{background:var(--green);}
  .lsms.active::before{background:var(--ls-cyan);}
  .lsmshead{display:flex;align-items:center;justify-content:space-between;}
  .lsmslabel{font-size:.86rem;font-weight:600;color:#fff;}
  .lsmsdot{width:9px;height:9px;border-radius:50%;background:#5a6a82;flex-shrink:0;}
  .lsms.done .lsmsdot{background:var(--green);box-shadow:0 0 6px 1px rgba(46,125,79,.7);}
  .lsms.active .lsmsdot{background:var(--ls-cyan);box-shadow:0 0 6px 1px rgba(79,227,255,.7);animation:lsdotpulse 1.6s ease-in-out infinite;}
  .lsmsstate{font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:#9fb3c4;}
  .lsms.done .lsmsstate{color:#8fd6ad;}
  .lsms.active .lsmsstate{color:var(--ls-cyan);}
  .lsfooter{margin-top:26px;font-size:.72rem;color:#6d7f9a;text-align:center;}

  /* Daniel, 2026-08-23: funding-date confirmation panel inside Live Status,
     Fortress-style (closingJourney) deals only, see lsFpRunScan() and
     auth-funding-readiness.js. The calendar scan is purely decorative, a
     loading-style animation, same honesty rule as the rest of Live Status
     (.lsscanline/.lsfooter above): it never lands on or implies a date
     that isn't real. If Tom has already set one, it settles on that exact
     date; if not, it settles on nothing and the real AI-reviewed status
     text underneath explains why. */
  .lsfundingpanel{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);border-radius:12px;padding:20px 22px;margin-top:18px;}
  .lsfpheader{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:14px;flex-wrap:wrap;}
  .lsfptitle{font-size:.86rem;font-weight:600;color:#fff;letter-spacing:.02em;}
  .lsfpai{font-size:.64rem;letter-spacing:.08em;text-transform:uppercase;color:var(--gold-light);border:1px solid rgba(212,169,89,.4);border-radius:20px;padding:3px 10px;white-space:nowrap;}
  .lsfpmonthlabel{text-align:center;font-size:.68rem;letter-spacing:.1em;text-transform:uppercase;color:#8fb8cc;margin-bottom:8px;transition:opacity .15s;}
  .lsfpcal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;max-width:300px;margin:0 auto 16px;}
  .lsfpdow{font-size:.6rem;color:#5a6a82;text-align:center;text-transform:uppercase;letter-spacing:.03em;padding-bottom:2px;}
  .lsfpcell{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:6px;font-size:.7rem;color:#9fb3c4;background:rgba(255,255,255,.03);transition:background .12s,color .12s,transform .12s,box-shadow .2s;}
  .lsfpcell.blank{background:transparent;}
  .lsfpcell.scanning{background:rgba(79,227,255,.4);color:#fff;transform:scale(1.1);}
  .lsfpcell.confirmed{background:var(--green);color:#fff;font-weight:700;box-shadow:0 0 10px 2px rgba(46,125,79,.6);}
  .lsfpstatus{font-size:.82rem;color:#c3d2df;line-height:1.55;text-align:center;max-width:520px;margin:0 auto;}
  .lsfpstatus.confirmed{color:#8fd6ad;font-weight:600;font-size:.9rem;}
  .lsfpoutstanding{margin:12px auto 0;text-align:left;font-size:.78rem;color:#9fb3c4;display:flex;flex-direction:column;gap:5px;max-width:380px;}
  .lsfpoutstanding li{list-style:none;padding-left:16px;position:relative;}
  .lsfpoutstanding li::before{content:'\2022';position:absolute;left:2px;color:var(--ls-cyan);}
  .lsfpdanielbadge{display:inline-flex;align-items:center;gap:6px;font-size:.64rem;letter-spacing:.06em;text-transform:uppercase;color:#8fd6ad;border:1px solid rgba(46,125,79,.5);background:rgba(46,125,79,.12);border-radius:20px;padding:3px 10px;white-space:nowrap;}
  .lsfpdanieldot{width:6px;height:6px;border-radius:50%;background:var(--green);box-shadow:0 0 6px 1px rgba(46,125,79,.7);animation:lsdotpulse 1.6s ease-in-out infinite;}
  .lsfpscanrow{display:flex;align-items:flex-start;justify-content:center;gap:28px;flex-wrap:wrap;}
  .lsfpclockface{display:flex;flex-direction:column;align-items:center;gap:6px;padding-top:2px;}
  .lsfpclocklabel{font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;color:#5a6a82;}
  .lsfpworking{text-align:center;font-size:.76rem;color:#8fb8cc;margin-bottom:10px;font-style:italic;}
  /* Daniel, 2026-08-28 ("EVERYTHING IS NOW COMPLETED... FINAL QA CHECK...
     AI, AND OUR UNDERWRITING AND RESEARCH GROUP IN GRAND CAYMAN... CREATE
     SOME KIND LAUNCH ANIMATION LIKE WHEN A ROCKET IS BEING SENT INTO
     SPACE, THINK OF THE GRAND CAYMAN TEAM TO BE LAUNCH CONTROL"): Final QA
     stage, shown in place of the clock+calendar sweep once Daniel's own
     final review/notarization is complete (see finalQaActive in
     auth-funding-readiness.js). Same honesty rule as the clock/calendar
     above -- the rocket motion is decorative, the two status lines below
     it are real facts (AI scan clear the instant this stage starts, Grand
     Cayman green light only on once an internal action actually sets it). */
  .lsfpqabadge{display:inline-flex;align-items:center;gap:6px;font-size:.64rem;letter-spacing:.06em;text-transform:uppercase;color:#7fd4e8;border:1px solid rgba(79,227,255,.4);background:rgba(79,227,255,.1);border-radius:20px;padding:3px 10px;white-space:nowrap;}
  .lsfpqadot{width:6px;height:6px;border-radius:50%;background:var(--ls-cyan);box-shadow:0 0 6px 1px rgba(79,227,255,.7);animation:lsdotpulse 1.6s ease-in-out infinite;}
  .lsfplaunchwrap{display:flex;flex-direction:column;align-items:center;gap:16px;width:100%;}
  .lsfppad{position:relative;width:100%;height:150px;display:flex;align-items:flex-end;justify-content:center;overflow:hidden;}
  .lsfprocket{position:relative;transition:transform 2.2s cubic-bezier(.4,0,.2,1),opacity 1.4s ease .6s;}
  .lsfprocket.liftoff{transform:translateY(-220px);}
  .lsfprocket.liftoff.gone{opacity:0;}
  .lsfppadbase{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:120px;height:3px;background:rgba(255,255,255,.14);border-radius:2px;}
  .lsfpflame{transform-origin:50% 0%;animation:lsfpflicker .18s ease-in-out infinite alternate;}
  @keyframes lsfpflicker{from{transform:scaleY(1);opacity:.9;}to{transform:scaleY(1.28);opacity:1;}}
  .lsfpidlebob{animation:lsfpbob 3.2s ease-in-out infinite;}
  @keyframes lsfpbob{0%,100%{transform:translateY(0);}50%{transform:translateY(-4px);}}
  .lsfplaunchcontrol{width:100%;max-width:420px;border:1px solid rgba(255,255,255,.12);border-radius:10px;background:rgba(255,255,255,.03);padding:12px 16px;}
  .lsfplaunchcontroltitle{font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;color:#5a6a82;text-align:center;margin-bottom:10px;}
  .lsfplaunchrow{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:.74rem;padding:5px 0;border-top:1px solid rgba(255,255,255,.06);}
  .lsfplaunchrow:first-of-type{border-top:none;}
  .lsfplaunchrowlabel{color:#9fb3c4;}
  .lsfplaunchrowstate{font-weight:700;letter-spacing:.04em;text-transform:uppercase;font-size:.68rem;}
  .lsfplaunchrowstate.clear{color:#8fd6ad;}
  .lsfplaunchrowstate.standby{color:var(--gold-light);}
  .lsfplaunchrowstate.go{color:#8fd6ad;}
  /* Daniel, 2026-09-04 ("fortress keeps sending tickets... status is
     incorrect, the status is that they are in funding queue, staging their
     wire"): a real state between Standby and Go -- Tom has moved the
     Closing & Funding switch to yellow, see closingFundingStatus in
     finalQaGate() (lib/store.js) -- that this panel never had a case for. */
  .lsfplaunchrowstate.staging{color:var(--ls-cyan);}

  /* ===== Closing Engine status popup, Daniel 2026-08-22: "when they open
     their portal they will get a new interactive popup, for status
     update..." Originally Fortress-only, genericized 2026-08-22 (MGCH) to
     any deal with closingEngineEnabled:true (see
     maybeShowClosingEnginePrompt() in the script below). This used to open
     a separate full-screen "Closing Engine" overlay styled rust/gold, but
     it rendered the exact same computeReadinessMilestones() data as Live
     Status above, just re-skinned. Daniel, 2026-08-22 (later): "i think we
     have two duplicate functions on the dashboard now... combine any
     features that are duplicated" -- the overlay + its CSS were removed;
     the popup now opens Live Status directly (see
     viewClosingEngineFromPopup() in the script). Only the popup itself
     (#closingEnginePopup, below) remains. ===== */

  /* ===== BridgeStar Score: deal-quality score card, modeled on Foundcheck's
     scored-categories-plus-"why this score" presentation (see
     https://www.foundcheck.ai) but in BridgeStar's own institutional
     design language, see renderBridgeStarScore() in the script below. ===== */
  .scorecard{padding:24px 26px;}
  .scoretop{display:flex;align-items:center;gap:22px;flex-wrap:wrap;margin-bottom:18px;}
  .scoregauge{--pct:0;--sgcolor:var(--gold);width:88px;height:88px;border-radius:50%;background:conic-gradient(var(--sgcolor) calc(var(--pct)*1%),#e2d8c5 0);display:flex;align-items:center;justify-content:center;flex-shrink:0;position:relative;transition:background 1s cubic-bezier(.4,0,.2,1);}
  .scoregauge::before{content:'';position:absolute;inset:8px;border-radius:50%;background:#fff;}
  .scoregauge .sgnum{position:relative;font-size:1.5rem;font-weight:700;color:var(--navy);text-align:center;font-family:var(--font-display);}
  .scoregauge .sgnum small{display:block;font-size:.52rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-weight:normal;font-family:var(--font-ui);margin-top:1px;}
  .scoreintro{flex:1;min-width:220px;}
  .scoreintro h3{margin:0 0 4px;}
  .scoreintro p{margin:0;font-size:.85rem;color:var(--muted);line-height:1.5;}
  .scorecats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin-bottom:18px;}
  .scorecatlabel{display:flex;justify-content:space-between;font-size:.76rem;color:var(--muted);margin-bottom:5px;}
  .scorecatlabel span:last-child{font-weight:700;color:var(--ink);}
  .scorecatbar{height:6px;border-radius:3px;background:#e2d8c5;overflow:hidden;}
  .scorecatbar div{height:100%;border-radius:3px;transition:width .6s ease;}
  .scorewhy{border-top:1px solid var(--line);padding-top:14px;}
  .scorewhy h4{margin:0 0 8px;font-size:.86rem;color:var(--navy);}
  .scorewhy ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:7px;}
  .scorewhy li{font-size:.82rem;color:var(--ink);line-height:1.5;display:flex;gap:8px;align-items:baseline;}
  .scorefactor{flex-shrink:0;min-width:34px;text-align:right;font-weight:700;font-size:.78rem;font-family:var(--font-ui);}
  .scorefactor.pos{color:var(--green);}
  .scorefactor.neg{color:var(--red);}
  .scorefactornote{color:var(--muted);}
  .scorepush{margin-top:18px;border:1px solid var(--gold);border-radius:8px;background:#fffefb;padding:16px 18px;}
  .scorepushbadge{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em;color:var(--gold);font-weight:700;margin-bottom:6px;}
  .scorepushline{font-size:.86rem;color:var(--ink);margin:0 0 12px;line-height:1.5;}
  .scorepushbtns{display:flex;flex-wrap:wrap;align-items:center;gap:10px;}
  .scorepushnote{font-size:.74rem;color:var(--muted);}

  /* ===== Badge Case: Swarm/Foursquare-style milestone stickers, unlocked
     as the BridgeStar Score and real deal progress advance, see
     computeDealBadges() in lib/store.js and renderBridgeStarScore() below.
     Kept in the same gold/navy institutional palette as everything else,
     a coin/medallion rather than a cartoon sticker. ===== */
  .badgecase{margin-top:18px;border-top:1px solid var(--line);padding-top:16px;}
  .badgecasehead{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:12px;flex-wrap:wrap;gap:6px;}
  .badgecasehead h4{margin:0;font-size:.86rem;color:var(--navy);}
  .badgecount{font-size:.76rem;color:var(--muted);}
  .badgegrid{display:flex;flex-wrap:wrap;gap:16px;}
  .badgeitem{width:80px;text-align:center;}
  .badgeicon{width:56px;height:56px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.5rem;margin:0 auto 6px;background:#f4f1e8;border:2px solid #ddd6c0;filter:grayscale(1);opacity:.4;transition:transform .2s ease;}
  .badgeitem.earned .badgeicon{background:linear-gradient(135deg,#fff8e8,#f5e4b8);border-color:var(--gold);filter:none;opacity:1;box-shadow:0 2px 8px rgba(181,89,31,.32);}
  .badgeitem.justearned .badgeicon{animation:badgepop .7s ease;}
  @keyframes badgepop{0%{transform:scale(.55);}55%{transform:scale(1.2);}100%{transform:scale(1);}}
  .badgelabel{font-size:.66rem;color:var(--muted);line-height:1.3;}
  .badgeitem.earned .badgelabel{color:var(--ink);font-weight:600;}
  .mayorcrown{position:absolute;top:-10px;right:-6px;font-size:1.3rem;filter:drop-shadow(0 1px 2px rgba(0,0,0,.35));z-index:3;}

  /* ===== How You Compare: anonymized peer benchmarking, see
     getPeerComparison() in lib/store.js. Never renders any other deal's
     name/id, only aggregate numbers. ===== */
  .comparecard{margin-top:18px;border-top:1px solid var(--line);padding-top:16px;}
  .comparehead{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:6px;margin-bottom:8px;}
  .comparecard h4{margin:0;font-size:.86rem;color:var(--navy);}
  .comparenote{font-size:.74rem;color:var(--muted);}
  .comparestat{font-size:.86rem;color:var(--ink);margin-bottom:12px;}
  .comparetrack{position:relative;height:8px;border-radius:4px;background:#e2d8c5;margin:0 6px 8px;}
  .comparemark{position:absolute;top:50%;width:12px;height:12px;border-radius:50%;transform:translate(-50%,-50%);border:2px solid #fff;box-shadow:0 1px 3px rgba(0,0,0,.25);}
  .comparemark.avg{background:var(--muted);width:3px;height:16px;border-radius:2px;border:none;box-shadow:none;}
  .comparemark.you{background:var(--gold);z-index:2;}
  .comparelegend{display:flex;gap:16px;font-size:.72rem;color:var(--muted);margin-bottom:14px;flex-wrap:wrap;}
  .comparelegend .dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:4px;}
  .comparelegend .dot.you{background:var(--gold);}
  .comparelegend .dot.avg{background:var(--muted);}
  .comparecats{display:flex;flex-direction:column;gap:6px;}
  .comparecatrow{display:flex;justify-content:space-between;font-size:.8rem;color:var(--ink);gap:10px;}
  .comparecatlabel{color:var(--muted);}

  /* ===== Verification strip: gamified Bank Verified / Test Wire chips,
     used on light .card backgrounds (Wire Confirmation Log + Dashboard
     Closing Pipeline), unlike .milestonechip above which is styled for
     the dark readiness widget. ===== */
  .vstrip{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:2px 0 16px;}
  .vchip{display:flex;align-items:center;gap:9px;padding:8px 14px;border-radius:22px;font-size:.78rem;border:1px solid var(--line);background:var(--paper);transition:transform .15s ease,box-shadow .25s ease;}
  .vchip:hover{transform:translateY(-1px);}

  /* ===== Deal Timeline, Daniel 2026-08-18: "a client-facing deal
     timeline/history view (a chronological feed of every milestone,
     distinct from the internal Activity Log)". A single vertical rail of
     milestone-level events derived from the same real submission/key-date
     data the Readiness Widget already reads (see computeDealTimeline() in
     the JS, deliberately parallel to computeReadinessMilestones()) --
     never the raw internal audit log, which is full of internal-only
     noise (logins, admin edits, security alerts) a client shouldn't see.
     ===== */
  .timeline{position:relative;margin:18px 0 4px;padding-left:28px;}
  .timeline::before{content:'';position:absolute;left:8px;top:4px;bottom:4px;width:2px;background:var(--line);}
  .titem{position:relative;padding-bottom:22px;}
  .titem:last-child{padding-bottom:0;}
  .titem::before{content:'';position:absolute;left:-28px;top:3px;width:14px;height:14px;border-radius:50%;background:var(--panel);border:2px solid var(--line);}
  .titem.done::before{background:var(--green);border-color:var(--green);}
  .titem.active::before{background:var(--gold);border-color:var(--gold);box-shadow:0 0 0 4px rgba(181,89,31,.18);}
  .titem-date{font-size:.72rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em;margin-bottom:2px;}
  .titem-title{font-size:.92rem;font-weight:600;color:var(--ink);}
  .titem-detail{font-size:.8rem;color:var(--muted);margin-top:2px;}
  .vchip .vicon{width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.72rem;font-weight:bold;background:#e2d8c5;color:var(--muted);flex-shrink:0;}
  .vchip .vtext{display:flex;flex-direction:column;line-height:1.25;}
  .vchip .vlabel{font-weight:700;color:var(--ink);}
  .vchip .vdate{font-size:.68rem;color:var(--muted);font-variant-numeric:tabular-nums;}
  .vchip.done{background:var(--green-bg);border-color:rgba(46,125,79,.3);}
  .vchip.done .vicon{background:var(--green);color:#fff;}
  .vchip.done .vlabel{color:var(--green);}
  .vchip.done.justdone{animation:vpop .55s ease;}
  .vchip.done.justdone .vicon{animation:vspin .55s ease;}
  @keyframes vpop{0%{transform:scale(.75);opacity:0;box-shadow:0 0 0 0 rgba(46,125,79,.5);}55%{transform:scale(1.07);box-shadow:0 0 0 9px rgba(46,125,79,0);}100%{transform:scale(1);opacity:1;box-shadow:0 0 0 0 rgba(46,125,79,0);}}
  @keyframes vspin{0%{transform:rotate(-100deg) scale(.4);}100%{transform:rotate(0) scale(1);}}
  .vprogress{display:inline-flex;align-items:center;gap:5px;font-size:.72rem;color:var(--muted);margin-left:2px;}
  /* Extra .vchip states for the Due Diligence & Funding tab's document-set
     sub-stepper (locked/active/pending/rejected), the base .vchip/.vchip.done
     rules above only covered the Wire Confirmation Log's two-state chips. */
  .vchip.locked{opacity:.5;cursor:default;}
  .vchip.active{border-color:var(--gold);box-shadow:0 0 0 2px rgba(181,89,31,.15);}
  .vchip.pending{background:#fff8e6;border-color:rgba(181,89,31,.35);cursor:pointer;}
  .vchip.pending .vicon{background:var(--amber);color:#fff;}
  .vchip.rejected{background:#fdeceb;border-color:rgba(198,60,50,.3);cursor:pointer;}
  .vchip.rejected .vicon{background:var(--red);color:#fff;}
  .vprogress .vdot{width:7px;height:7px;border-radius:50%;background:#e2d8c5;transition:background .3s ease;}
  .vprogress .vdot.on{background:var(--green);}

  .dropzone{border:2px dashed var(--line);border-radius:10px;padding:26px 20px;text-align:center;cursor:pointer;transition:border-color .15s ease,background .15s ease;background:#fbfaf6;}
  .dropzone:hover, .dropzone.dragover{border-color:var(--gold);background:var(--amber-bg);}
  .dropzone .dzicon{font-size:1.8rem;margin-bottom:6px;}
  .dropzone .dztext{font-size:.86rem;color:var(--ink);}
  .dropzone .dzsub{font-size:.74rem;color:var(--muted);margin-top:4px;}
  .filechip{display:flex;align-items:center;gap:10px;background:#fff;border:1px solid var(--line);border-radius:8px;padding:10px 12px;margin-top:12px;animation:fade .25s ease;}
  .filechip .ficon{width:32px;height:32px;border-radius:6px;background:var(--blue-bg);color:var(--blue);display:flex;align-items:center;justify-content:center;font-size:.9rem;flex-shrink:0;}
  .filechip .finfo{flex:1;min-width:0;}
  .filechip .fname{font-size:.84rem;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
  .filechip .fmeta{font-size:.72rem;color:var(--muted);}
  .uploadbar{height:5px;background:#e2d8c5;border-radius:4px;overflow:hidden;margin-top:6px;}
  .uploadbar > div{height:100%;background:linear-gradient(90deg,var(--gold),var(--gold-light));width:0%;transition:width .3s ease;}

  .pulsedot{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--amber);margin-right:5px;animation:pulse 1.4s ease-in-out infinite;}
  @keyframes pulse{0%,100%{opacity:1;transform:scale(1);}50%{opacity:.4;transform:scale(1.3);}}

  .checkpop{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--green);color:#fff;font-size:.72rem;animation:checkpop .4s cubic-bezier(.34,1.56,.64,1);}
  @keyframes checkpop{0%{transform:scale(0);opacity:0;}70%{transform:scale(1.2);}100%{transform:scale(1);opacity:1;}}

  .skeleton{background:linear-gradient(90deg,#e2d8c5 25%,#f5f3ec 37%,#e2d8c5 63%);background-size:400% 100%;animation:shimmer 1.4s ease infinite;border-radius:6px;height:14px;}
  @keyframes shimmer{0%{background-position:100% 0;}100%{background-position:0 0;}}

  .stepform{position:relative;min-height:160px;}
  .stepframe{animation:fade .3s ease;}
  /* Daniel, 2026-08-22 (UI/UX QA pass): the Payout/Wire Bank Info wizard
     (renderPbStep(), pbHolder/pbBank/pbType/pbBankAddress/pbBankPhone/
     pbBankEmail/pbRouting/pbAccount/pbNote) and the underwriting
     questionnaire (renderUwForm(), the per-question <select>) build their
     fields straight into a .stepframe, not a <form> and not .obfield, so
     none of them picked up any of this file's input styling -- they
     rendered as bare browser controls. This also (correctly) reaches the
     onboarding wizard's .obfield input/select fields nested one level
     deeper inside the same .stepframe, which had the identical problem;
     .obfield's own textarea rule further down still wins for textareas
     since this one deliberately excludes them. */
  .stepframe input:not([type=file]):not([type=checkbox]):not([type=radio]),
  .stepframe select{width:100%;padding:9px 10px;border:1px solid #e2d8c5;border-radius:4px;font-family:var(--font-ui);font-size:.9rem;background:#fffefb;}
  .stepdots{display:flex;gap:6px;margin-bottom:18px;}
  .stepdots .sdd{flex:1;height:4px;border-radius:3px;background:#e2d8c5;transition:background .3s ease;}
  .stepdots .sdd.on{background:var(--gold);}

  .trail{display:flex;flex-direction:column;gap:0;}
  .trailnode{display:flex;gap:14px;position:relative;padding-bottom:22px;}
  .trailnode:last-child{padding-bottom:0;}
  .trailnode .tline{position:absolute;left:13px;top:28px;bottom:0;width:2px;background:var(--line);}
  .trailnode:last-child .tline{display:none;}
  .trailnode.done .tline{background:var(--green);}
  .trailnode .tdot{width:28px;height:28px;border-radius:50%;background:#e2d8c5;color:var(--muted);display:flex;align-items:center;justify-content:center;font-size:.8rem;flex-shrink:0;z-index:1;transition:background .3s ease,color .3s ease,transform .2s ease;}
  .trailnode.done .tdot{background:var(--green);color:#fff;}
  .trailnode.pending .tdot{background:var(--amber);color:#fff;}
  .trailnode .tbody{flex:1;padding-top:2px;}
  .trailnode .ttitle{font-size:.9rem;color:var(--ink);}
  .trailnode .tnote{font-size:.78rem;color:var(--muted);margin-top:2px;}

  /* ===== Closing Journey (due diligence -> demographics -> use of funds -> amendments -> final agreement) ===== */
  .cj-vaultwrap{position:relative;display:flex;flex-direction:column;align-items:center;gap:10px;padding:22px 20px;overflow:visible;}
  .cj-vaulticon{font-size:2.6rem;transition:transform .3s cubic-bezier(.34,1.56,.64,1);}
  .cj-vaulticon.bump{animation:cjbump .55s cubic-bezier(.34,1.56,.64,1);}
  @keyframes cjbump{0%{transform:scale(1) rotate(0);}40%{transform:scale(1.25) rotate(-6deg);}70%{transform:scale(.94) rotate(4deg);}100%{transform:scale(1) rotate(0);}}
  .cj-fly{position:absolute;top:60%;left:50%;font-size:1.4rem;pointer-events:none;transform:translate(-50%,0);animation:cjfly 1s cubic-bezier(.2,.7,.3,1) forwards;}
  @keyframes cjfly{0%{opacity:1;transform:translate(-50%,0) scale(1);}100%{opacity:0;transform:translate(-50%,-70px) scale(.6);}}
  .cj-vaultlabel{font-size:.8rem;color:var(--muted);text-align:center;}
  .cj-docbody{font-size:.86rem;line-height:1.65;color:var(--ink);max-height:440px;overflow-y:auto;padding:18px 20px;background:#fbfaf6;border:1px solid var(--line);border-radius:8px;}
  .cj-docbody p{margin:0 0 13px;white-space:pre-wrap;}
  .cj-docbody p:last-child{margin-bottom:0;}
  .cj-party{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--line);border-radius:8px;margin-top:8px;background:#fff;}
  .cj-party.signed{border-color:var(--green);background:var(--green-bg);}
  .cj-party .cjp-name{font-size:.88rem;color:var(--ink);font-weight:bold;}
  .cj-party .cjp-role{font-size:.74rem;color:var(--muted);}
  .cj-waitpulse{display:flex;flex-direction:column;align-items:center;gap:10px;padding:34px 20px;text-align:center;}
  .cj-waiticon{font-size:2.8rem;animation:cjwait 2.2s ease-in-out infinite;}
  @keyframes cjwait{0%,100%{transform:scale(1);opacity:.85;}50%{transform:scale(1.08);opacity:1;}}
  .cj-uoftable{width:100%;border-collapse:collapse;margin-top:10px;}
  .cj-uoftable th{text-align:left;font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:6px 8px;border-bottom:1px solid var(--line);}
  .cj-uoftable td{padding:6px 8px;border-bottom:1px solid var(--line);}
  .cj-uoftable input{width:100%;border:1px solid var(--line);border-radius:5px;padding:6px 8px;font:inherit;}

  #confettiCanvas{position:fixed;inset:0;pointer-events:none;z-index:900;}

  .obwrap{max-width:720px;margin:0 auto;padding:36px 20px 60px;}
  .obhead{text-align:center;margin-bottom:22px;}
  .obbucket{display:inline-flex;align-items:center;gap:6px;background:var(--navy);color:#fff;border-radius:20px;padding:5px 14px;font-size:.72rem;letter-spacing:.05em;text-transform:uppercase;margin-bottom:12px;}
  .obprogress{display:flex;gap:6px;margin-bottom:24px;}
  .obprogress .obseg{flex:1;height:5px;border-radius:3px;background:#e2d8c5;transition:background .3s ease;}
  .obprogress .obseg.on{background:var(--gold);}
  .obprogress .obseg.current{background:var(--navy);}
  .obfield{margin-top:14px;}
  .obfield:first-child{margin-top:0;}
  .obfield textarea{width:100%;border:1px solid var(--line);border-radius:8px;padding:10px 12px;font:inherit;resize:vertical;min-height:70px;}
  .obradiorow{display:flex;flex-direction:column;gap:8px;margin-top:6px;}
  .obradiorow label{display:flex;align-items:flex-start;gap:8px;font-size:.86rem;color:var(--ink);text-transform:none;letter-spacing:normal;cursor:pointer;}
  .obradiorow input{margin-top:3px;}
  .obdoclist{display:flex;flex-direction:column;gap:10px;margin-top:6px;}
  .obdocrow{border:1px solid var(--line);border-radius:8px;padding:12px 14px;background:#fbfaf6;}
  .obdocrow.done{border-color:var(--green);background:#f4faf6;}
  .obdocrow .odtitle{display:flex;align-items:center;gap:8px;font-size:.86rem;color:var(--ink);}
  .obdocrow .odreq{color:var(--red);font-size:.72rem;}
  .obdocrow .odsub{font-size:.74rem;color:var(--muted);margin:2px 0 8px;}
  .obreviewtable{width:100%;border-collapse:collapse;}
  .obreviewtable td{padding:6px 0;border-bottom:1px solid var(--line);font-size:.84rem;vertical-align:top;}
  .obreviewtable td:first-child{color:var(--muted);width:42%;padding-right:12px;}

  /* ===== Jeeves, the BridgeStar concierge chat widget (client scope only) ===== */
  .jeeves-launcher{position:fixed;bottom:24px;right:24px;width:60px;height:60px;border-radius:50%;background:var(--navy);box-shadow:0 6px 20px rgba(15,36,56,.35);display:flex;align-items:center;justify-content:center;cursor:pointer;z-index:500;transition:transform .15s ease;}
  .jeeves-launcher:hover{transform:scale(1.06);}
  .jeeves-launcher svg{width:38px;height:38px;}
  .jeeves-badge{position:absolute;top:-2px;right:-2px;width:16px;height:16px;border-radius:50%;background:var(--red);border:2px solid var(--paper);}
  .jeeves-panel{position:fixed;bottom:96px;right:24px;width:min(360px,calc(100vw - 32px));height:min(520px,calc(100vh - 140px));background:var(--panel);border:1px solid var(--line);border-radius:14px;box-shadow:0 12px 40px rgba(15,36,56,.25);display:flex;flex-direction:column;overflow:hidden;z-index:500;}
  .jeeves-header{display:flex;align-items:center;gap:10px;padding:14px 16px;background:var(--navy);color:#fff;flex-shrink:0;}
  .jeeves-header svg{width:32px;height:32px;flex-shrink:0;}
  .jeeves-title{font-weight:bold;font-size:.95rem;line-height:1.2;}
  .jeeves-subtitle{font-size:.7rem;color:#c3d2df;letter-spacing:.03em;}
  .jeeves-close{margin-left:auto;background:none;border:none;color:#c3d2df;font-size:.95rem;cursor:pointer;padding:4px;}
  .jeeves-close:hover{color:#fff;}
  .jeeves-messages{flex:1;overflow-y:auto;padding:14px 14px 6px;display:flex;flex-direction:column;gap:10px;background:#fbfaf6;}
  .jmsg{max-width:82%;padding:9px 12px;border-radius:12px;font-size:.85rem;line-height:1.42;white-space:pre-wrap;word-break:break-word;}
  .jmsg.user{align-self:flex-end;background:var(--navy);color:#fff;border-bottom-right-radius:3px;}
  .jmsg.jeeves{align-self:flex-start;background:#fff;border:1px solid var(--line);color:var(--ink);border-bottom-left-radius:3px;}
  .jmsg.jeeves.escalated{border-color:#e3d3a8;background:#fdf9ef;}
  .jmsg.jeeves.fromteam{border-color:var(--green);background:#f4faf6;}
  .jmsg .jtag{display:block;font-size:.66rem;text-transform:uppercase;letter-spacing:.04em;margin-bottom:3px;font-weight:bold;}
  .jmsg.jeeves.escalated .jtag{color:var(--gold);}
  .jmsg.jeeves.fromteam .jtag{color:var(--green);}
  .jeeves-typing{align-self:flex-start;display:flex;gap:4px;padding:10px 12px;}
  .jeeves-typing span{width:6px;height:6px;border-radius:50%;background:#b7bfc9;animation:jtyping 1.1s infinite ease-in-out;}
  .jeeves-typing span:nth-child(2){animation-delay:.15s;}
  .jeeves-typing span:nth-child(3){animation-delay:.3s;}
  @keyframes jtyping{0%,60%,100%{opacity:.35;transform:translateY(0);}30%{opacity:1;transform:translateY(-3px);}}
  .jeeves-inputrow{display:flex;gap:8px;padding:12px;border-top:1px solid var(--line);background:var(--panel);flex-shrink:0;}
  .jeeves-inputrow input{flex:1;border:1px solid var(--line);border-radius:20px;padding:9px 14px;font:inherit;font-size:.85rem;}
  .jeeves-inputrow button{border-radius:20px;padding:8px 16px;}
  .jeeves-empty{color:var(--muted);font-size:.82rem;text-align:center;margin:auto;padding:0 20px;line-height:1.5;}
  @media(max-width:480px){.jeeves-panel{right:16px;bottom:88px;} .jeeves-launcher{right:16px;bottom:16px;}}

  /* ===== Public Jeeves, "powered by BridgeStar AI" (anonymous visitors,
     pre-login, see the widget markup inside #publicSite). Reuses the
     .jeeves-launcher/.jeeves-panel/etc. classes above for visual
     consistency, only what's genuinely new to the public version gets
     its own rules here: a one-time dismissible nudge bubble, suggested-
     action buttons under a reply, and the optional name/email fields. ===== */
  .jeeves-pub-hint{position:fixed;bottom:34px;right:92px;max-width:200px;background:#fff;color:var(--ink);border:1px solid var(--line);border-radius:10px;padding:9px 13px;font-size:.78rem;font-weight:bold;line-height:1.3;box-shadow:0 6px 20px rgba(15,36,56,.18);z-index:499;cursor:pointer;animation:jpubfadein .4s ease;}
  .jeeves-pub-hint:after{content:'';position:absolute;right:-6px;top:50%;transform:translateY(-50%);border-width:6px 0 6px 6px;border-style:solid;border-color:transparent transparent transparent #fff;}
  @keyframes jpubfadein{from{opacity:0;transform:translateY(6px);}to{opacity:1;transform:translateY(0);}}
  .jmsg-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
  .jmsg-actions button{border-radius:20px;padding:6px 12px;font-size:.78rem;}
  .jeeves-pub-contact{display:flex;gap:6px;padding:8px 12px 0;border-top:1px solid var(--line);background:var(--panel);}
  .jeeves-pub-contact input{flex:1;min-width:0;border:1px solid var(--line);border-radius:8px;padding:6px 8px;font:inherit;font-size:.74rem;}
  @media(max-width:480px){.jeeves-pub-hint{right:16px;bottom:88px;max-width:170px;}}

  /* ===== Approval notifications bell (client scope only) ===== */
  .notifbtn{position:relative;}
  .notif-badge{position:absolute;top:-6px;right:2px;min-width:16px;height:16px;padding:0 3px;border-radius:8px;background:var(--red);color:#fff;font-size:.62rem;line-height:16px;text-align:center;border:2px solid var(--navy-3);display:none;}
  .notif-panel{display:none;position:absolute;top:100%;right:0;margin-top:8px;width:340px;max-width:calc(100vw - 32px);max-height:420px;overflow-y:auto;background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 40px rgba(15,36,56,.3);z-index:600;text-align:left;}
  .notif-panel-header{padding:12px 14px;font-weight:bold;border-bottom:1px solid var(--line);font-size:.85rem;display:flex;justify-content:space-between;align-items:center;}
  .notif-panel-header button{background:none;border:none;color:var(--navy-2);font-size:.72rem;cursor:pointer;text-decoration:underline;font-family:var(--font-ui);padding:0;}
  .notif-item{padding:12px 14px;border-bottom:1px solid var(--line);font-size:.82rem;line-height:1.45;}
  .notif-item:last-child{border-bottom:none;}
  .notif-item.unread{background:var(--blue-bg);}
  .notif-item .notif-title{font-weight:bold;margin-bottom:3px;color:var(--navy);}
  .notif-item .notif-time{color:var(--muted);font-size:.72rem;margin-top:4px;}
  .notif-empty{padding:20px 14px;color:var(--muted);font-size:.82rem;text-align:center;line-height:1.5;}

/* ===== Added for standalone legal pages (Privacy Policy, Terms of Use,
   Disclaimer, Accessibility Statement) and a baseline accessibility pass,
   2026-09-05. These pages sit outside the single-page app's showPub()
   system, so header/nav/footer are plain links here rather than JS
   button toggles -- mirrored rules below so real <a> elements match the
   existing button.btn/.navlink look exactly. ===== */
a.btn{display:inline-block;text-decoration:none;font-family:var(--font-ui);background:var(--navy);color:#fff;border:none;padding:9px 18px;clip-path:polygon(6px 0,100% 0,100% calc(100% - 6px),calc(100% - 6px) 100%,0 100%,0 6px);cursor:pointer;font-size:.85rem;letter-spacing:.03em;transition:background .15s;}
a.btn:hover{background:var(--navy-2);}
a.btn.ghost{background:transparent;color:var(--navy);border:1px solid var(--navy);}
.pubnav a.navlink{display:inline-block;font-family:var(--font-ui);background:transparent;border:none;color:var(--muted);padding:9px 12px;font-size:.85rem;text-decoration:none;cursor:pointer;border-bottom:2px solid transparent;}
.pubnav a.navlink:hover{color:var(--navy);border-bottom:2px solid var(--gold);}

.legalblock{max-width:760px;margin:0 auto;padding:50px 0 70px;}
.legalblock .eyebrow-plain{color:var(--gold-deep);font-size:.72rem;text-transform:uppercase;letter-spacing:.09em;margin-bottom:10px;}
.legalblock h1{color:var(--navy);font-size:1.9rem;border-bottom:2px solid var(--gold);padding-bottom:14px;margin:0 0 6px;}
.legalblock .legaldate{color:var(--muted);font-size:.82rem;margin:0 0 34px;}
.legalblock h3{color:var(--navy);font-size:1.05rem;margin:30px 0 8px;font-family:var(--font-display);}
.legalblock p, .legalblock li{color:var(--muted);line-height:1.75;font-size:.92rem;}
.legalblock ul{margin:8px 0 0;padding-left:20px;display:flex;flex-direction:column;gap:6px;}
.legalblock a{color:var(--navy-2);}

.skip-link{position:absolute;left:-9999px;top:0;z-index:1000;background:var(--navy);color:#fff;padding:10px 18px;font-size:13px;border-radius:0 0 4px 0;}
.skip-link:focus{left:0;}
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, [tabindex]:focus-visible{
  outline:2px solid var(--gold);
  outline-offset:2px;
}

/* Keep footer legal links clear of the fixed Jeeves launcher (right:24px, bottom:24-84px, 60px circular button) */
footer.site { padding-bottom: 112px; }
