/* ============================================================
   FundLattice — design tokens
   Restrained fintech palette. One accent, used sparingly.
   Lifecycle colours are semantic and always paired with text.
   ============================================================ */
:root{
  /* surfaces */
  --bg:#f2f4f6;
  --surface:#ffffff;
  --surface-2:#f7f8fa;
  --surface-3:#eef0f3;
  --nav:#141a21;
  --nav-2:#1f2731;

  /* hairlines */
  --line:#e2e5ea;
  --line-2:#d3d8df;

  /* text */
  --ink:#121a24;
  --ink-2:#414c5b;
  --ink-3:#606975;
  --on-dark:#f4f6f8;
  --on-dark-2:#9aa6b4;

  /* accent — deep, desaturated. Never used as a decorative fill. */
  --accent:#2c5d8f;
  --accent-ink:#204a73;
  --accent-soft:#eaf0f6;
  --focus:#7aa6d6;

  /* lifecycle */
  --step1:#2f5d99;  --step1-bg:#eaf0f8;
  --step2:#8a6212;  --step2-bg:#fbf3e3;
  --funded:#11785a; --funded-bg:#e7f4ef;
  --dead:#a93f3d;   --dead-bg:#fbeded;
  --neutral:#5d6875;--neutral-bg:#eceff2;

  /* semantic */
  --pos:#11785a;
  --neg:#a93f3d;

  /* geometry */
  --r-card:10px;
  --r-ctl:7px;
  --r-pill:999px;
  --h-ctl:36px;
  --sidebar:232px;
  --topbar:56px;
  --bottomnav:58px;

  /* type */
  --fs-xs:11px; --fs-sm:12px; --fs-md:13px; --fs-lg:15px;

  --ring:0 0 0 3px rgba(122,166,214,.35);
}

*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  font-size:var(--fs-md);line-height:1.45;
  -webkit-font-smoothing:antialiased;
}
body.no-scroll{overflow:hidden}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
h1,h2,h3,h4{margin:0;font-weight:680;letter-spacing:-.01em}
table{border-collapse:collapse}

/* focus — one visible treatment everywhere */
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}

.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.muted{color:var(--ink-3)}
.small{font-size:var(--fs-sm)}
.tiny{font-size:var(--fs-xs)}
.pos{color:var(--pos)}
.neg{color:var(--neg)}
.num{font-variant-numeric:tabular-nums}
.nowrap{white-space:nowrap}
/* spacing utilities — the only sanctioned way to add vertical rhythm outside a .stack */
.mt{margin-top:14px}
.mt-s{margin-top:10px}
.mt-xs{margin-top:8px}
.mb-s{margin-bottom:10px}
.boxed{border:1px solid var(--line);border-radius:var(--r-card)}

/* ============================================================
   Top bar
   ============================================================ */
.topbar{
  position:fixed;inset:0 0 auto 0;height:var(--topbar);z-index:60;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:0 16px;background:var(--nav);color:var(--on-dark);
}
.topbar-l,.topbar-r{display:flex;align-items:center;gap:10px;min-width:0}
.brand{display:flex;align-items:center;gap:9px;font-size:15px;font-weight:700;letter-spacing:-.015em}
.brandmark{width:20px;height:20px;flex:none;display:block}
.hamburger{display:none;width:34px;height:34px;align-items:center;justify-content:center;
  background:transparent;border:1px solid #333d49;border-radius:var(--r-ctl);color:var(--on-dark)}
.hamburger:hover{background:var(--nav-2)}
.icon-btn{display:inline-flex;width:34px;height:34px;align-items:center;justify-content:center;flex:none;
  background:transparent;border:1px solid #333d49;border-radius:var(--r-ctl);color:var(--on-dark-2)}
.icon-btn:hover{background:var(--nav-2);color:var(--on-dark)}
.icon-btn[aria-pressed="true"]{background:#33404e;color:#fff}
.language-switch{display:inline-flex;align-items:center;gap:2px;padding:2px;flex:none;
  border:1px solid #45515e;border-radius:var(--r-ctl);background:#283442}
.language-switch button{min-width:31px;height:26px;border:0;border-radius:4px;background:transparent;
  color:var(--on-dark-2);font-size:var(--fs-xs);font-weight:700;line-height:1}
.language-switch button:hover{color:var(--on-dark)}
.language-switch button[aria-pressed="true"]{background:#e8f1fb;color:#172637}
.language-switch button:focus-visible{outline:2px solid #8dc7ff;outline-offset:2px}

/* role switch — a real segmented control, the only workspace control */
.roleswitch{display:flex;background:var(--nav-2);border:1px solid #303a46;border-radius:var(--r-ctl);padding:2px;gap:2px}
.roleswitch button{
  border:0;background:transparent;color:var(--on-dark-2);
  padding:5px 11px;border-radius:5px;font-size:var(--fs-sm);font-weight:600;white-space:nowrap;
}
.roleswitch button:hover{color:var(--on-dark)}
.roleswitch button[aria-pressed="true"]{background:#33404e;color:#fff}
.who{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--on-dark-2)}
.who .uname{display:flex;flex-direction:column;line-height:1.25;color:var(--on-dark)}
.who .urole{font-size:var(--fs-xs);color:var(--on-dark-2);font-weight:550}
.btn-exit{border:1px solid #333d49;background:transparent;color:var(--on-dark-2);
  height:30px;padding:0 11px;border-radius:var(--r-ctl);font-size:var(--fs-sm);font-weight:600;white-space:nowrap}
.btn-exit:hover{background:var(--nav-2);color:var(--on-dark)}
.mini-select{height:30px;border:1px solid var(--line-2);border-radius:var(--r-ctl);
  background:var(--surface);padding:0 26px 0 8px;font-size:var(--fs-sm);
  max-width:100%;min-width:0;width:100%;
  appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M3 4.5 6 8l3-3.5' fill='none' stroke='%23606975' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 8px center}
.split-head{font-size:var(--fs-xs);font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  color:var(--ink-2);display:flex;justify-content:space-between;gap:8px;align-items:baseline;
  padding-bottom:4px;border-bottom:1px solid var(--line)}
.split-head .muted,.split-head .small{text-transform:none;letter-spacing:0;font-weight:550}
.avatar{width:26px;height:26px;border-radius:var(--r-pill);display:grid;place-items:center;
  background:#2d3b49;color:#dbe4ee;font-size:var(--fs-sm);font-weight:700;flex:none}

/* ============================================================
   Login — the app shell is never rendered before sign-in
   ============================================================ */
/* height (not min-height), and svh over vh: this must never need a page
   scroll, on a desktop window or a phone with its address bar showing --
   100vh is the LARGEST possible mobile viewport (bar collapsed), so content
   sized to it can overflow the actually-visible area. 100svh is the
   smallest, so if it fits here, it always fits. Older browsers that don't
   know svh just keep the vh line above it. */
.login{height:100vh;height:100svh;display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr)}
.login-brand{background:var(--nav);color:var(--on-dark);padding:40px;
  display:flex;flex-direction:column;justify-content:space-between;gap:24px;overflow-y:auto;min-height:0}
.login-brand .brand{font-size:16px;flex:none}
/* The line break is an explicit <br> in the markup, not word-wrap -- no
   max-width here, or "Pas de patience," (wider than it looks at 60px) can
   wrap on its own too, making three lines instead of two. */
.login-pitch h1{font-size:clamp(29px,3.3vw,52px);line-height:1.12;font-weight:700;letter-spacing:-.015em;overflow-wrap:break-word}
.login-pitch p{margin:14px 0 0;color:var(--on-dark-2);max-width:42ch;line-height:1.6}
.login-foot{margin:0;font-size:var(--fs-sm);color:var(--on-dark-2);flex:none}
/* A safety valve, not the plan: content is sized to fit already, but if a
   render ever comes out taller (a browser's own font substitution, a
   bigger Turnstile challenge), this scrolls internally instead of the
   whole page growing past the viewport. */
.login-panel{display:flex;flex-direction:column;justify-content:center;gap:16px;position:relative;
  padding:40px;background:var(--bg);overflow-y:auto;min-height:0}
.login-panel>.language-switch{position:absolute;top:20px;right:20px;
  border-color:var(--line-2);background:var(--surface)}
.login-panel>.language-switch button{color:var(--ink-2)}
.login-panel>.language-switch button[aria-pressed="true"]{background:var(--nav);color:#fff}
.login-card{width:min(400px,100%);margin:0 auto;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--r-card);padding:22px;display:flex;
  flex-direction:column;gap:14px}
.login-card h2{font-size:18px}
.login-sub{margin:-8px 0 0;font-size:var(--fs-sm);color:var(--ink-3);line-height:1.5}
.login-submit{width:100%}
.login-demo{width:min(400px,100%);margin:0 auto}
.login-demo .btn{flex:1}
@media (max-width:860px){
  .login{grid-template-columns:1fr}
  .login-brand{padding:28px 20px;gap:18px}
  .login-pitch h1{font-size:clamp(28px,5.2vw,42px);max-width:none}
  .login-panel{padding:24px 20px}
}

/* ============================================================
   Sidebar
   ============================================================ */
.sidebar{
  position:fixed;left:0;top:var(--topbar);bottom:0;width:var(--sidebar);z-index:50;
  background:var(--surface);border-right:1px solid var(--line);
  padding:14px 10px;overflow-y:auto;display:flex;flex-direction:column;
}
.nav{display:flex;flex-direction:column;gap:1px}
.nav-group{font-size:var(--fs-xs);font-weight:700;letter-spacing:.06em;text-transform:uppercase;
  color:var(--ink-3);padding:8px 10px 6px}
.nav-item{
  display:flex;align-items:center;gap:10px;width:100%;
  border:0;background:transparent;color:var(--ink-2);
  padding:8px 10px;border-radius:var(--r-ctl);text-align:left;font-size:var(--fs-md);font-weight:550;
}
.nav-item:hover{background:var(--surface-2);color:var(--ink)}
.nav-item[aria-current="page"]{background:var(--surface-3);color:var(--ink);font-weight:650}
.nav-item svg{flex:none;opacity:.75}
.nav-item[aria-current="page"] svg{opacity:1}

.nav-scrim{display:none}

/* Bottom tab bar -- phone layout only (max-width:760px below). Markup is
   always rendered; hidden here by default so tablet/desktop keep the
   sidebar as the only nav. */
.bottomnav{display:none}
.sheet-scrim{display:none}

/* ============================================================
   Page shell
   ============================================================ */
.main{
  padding:calc(var(--topbar) + 20px) 20px 40px calc(var(--sidebar) + 20px);
  min-height:100vh;max-width:1560px;
}
.page-head{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:18px}
.page-head h1{font-size:21px;line-height:1.25}
.page-head p{margin:5px 0 0;color:var(--ink-3);max-width:74ch;font-size:var(--fs-md)}
.page-actions{display:flex;gap:8px;flex-wrap:wrap;flex:none}

.stack{display:flex;flex-direction:column;gap:14px}
.cols{display:grid;gap:14px;grid-template-columns:minmax(0,1.55fr) minmax(300px,.85fr);align-items:start}
.cols.single{grid-template-columns:minmax(0,1fr)}
/* two panels of equal weight; neither holds a wide table, so the pair survives
   further down than .cols does */
.duo{display:grid;gap:14px;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}

/* ============================================================
   Panel — the single container primitive (replaces "cards")
   ============================================================ */
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card)}
.panel-head{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px 14px;border-bottom:1px solid var(--line);min-height:46px;flex-wrap:wrap;
}
.panel-head>*{min-width:0;max-width:100%}
.panel-head h2{font-size:var(--fs-lg)}
.fold>summary{cursor:pointer;list-style:none}
.fold>summary::-webkit-details-marker{display:none}
.fold>summary::before{content:'▸';color:var(--ink-3);margin-right:8px;align-self:center}
.fold[open]>summary::before{content:'▾'}
.fold>summary:hover{background:var(--surface-2)}
.fold:not([open])>summary{border-bottom:0}
.panel-head .sub{font-size:var(--fs-sm);color:var(--ink-3);margin-top:2px}
.panel-body{padding:14px}
.panel-body.tight{padding:0}
.panel-foot{padding:10px 14px;border-top:1px solid var(--line);background:var(--surface-2);
  border-radius:0 0 var(--r-card) var(--r-card);font-size:var(--fs-sm);color:var(--ink-3)}

/* ============================================================
   Metric strip — flat, no icon tiles, no coloured squares
   ============================================================ */
.metrics{display:grid;grid-template-columns:repeat(var(--n,4),minmax(0,1fr));
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);overflow:hidden}
.metric{padding:13px 16px;border-left:1px solid var(--line)}
.metric:first-child{border-left:0}
.metric-label{font-size:var(--fs-xs);font-weight:650;color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em}
.metric-value{font-size:20px;font-weight:680;margin:5px 0 3px;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.metric-sub{font-size:var(--fs-xs);color:var(--ink-3);line-height:1.4}

/* ============================================================
   Buttons
   ============================================================ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:7px;
  height:var(--h-ctl);padding:0 13px;border-radius:var(--r-ctl);
  border:1px solid var(--line-2);background:var(--surface);color:var(--ink-2);
  font-size:var(--fs-md);font-weight:600;white-space:nowrap;
}
.btn:hover{background:var(--surface-2);color:var(--ink)}
.btn.primary{background:#1c2430;border-color:#1c2430;color:#fff}
.btn.primary:hover{background:#2a3543}
.btn.danger{background:var(--surface);border-color:#e2b6b5;color:var(--dead)}
.btn.danger:hover{background:var(--dead-bg)}
.btn.danger-solid{background:var(--dead);border-color:var(--dead);color:#fff}
.btn.danger-solid:hover{background:#963634}
.btn.sm{height:30px;padding:0 10px;font-size:var(--fs-sm)}
.btn:disabled{opacity:.42;cursor:not-allowed}
.btn:disabled:hover{background:var(--surface)}
.btn.primary:disabled:hover{background:#1c2430}
.btn-link{border:0;background:transparent;color:var(--accent);font-size:var(--fs-sm);
  font-weight:600;padding:4px 0;text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}
.btn-link:hover{color:var(--accent-ink)}
.btn-row{display:flex;gap:8px;flex-wrap:wrap;min-width:0;max-width:100%}

.rowbtn{width:28px;height:28px;border:1px solid transparent;background:transparent;border-radius:6px;
  display:grid;place-items:center;color:var(--ink-3)}
.rowbtn:hover{background:var(--surface-3);color:var(--ink);border-color:var(--line)}
.row-actions{display:inline-flex;align-items:center;justify-content:flex-end;gap:6px;white-space:nowrap}

/* ============================================================
   Segmented filters
   ============================================================ */
.segmented{display:inline-flex;background:var(--surface-2);border:1px solid var(--line);
  border-radius:var(--r-ctl);padding:2px;gap:2px;flex-wrap:wrap;min-width:0;max-width:100%}
.segmented button{border:0;background:transparent;color:var(--ink-3);
  padding:6px 11px;border-radius:5px;font-size:var(--fs-sm);font-weight:600;white-space:nowrap}
.segmented button:hover{color:var(--ink)}
.segmented button[aria-pressed="true"]{background:var(--surface);color:var(--ink);
  box-shadow:0 1px 2px rgba(18,26,36,.09)}
.segmented .count{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:var(--r-pill);
  background:var(--surface-3);color:var(--ink-3);font-weight:700;font-size:var(--fs-xs);
  vertical-align:middle;font-variant-numeric:tabular-nums}
.segmented button[aria-pressed="true"] .count{color:var(--ink-2)}

/* ============================================================
   Badges — two visually distinct families.
   .lc-*  lifecycle  : solid tint + dot
   .cap-* capacity   : outlined, no dot
   Never colour-only: every badge carries a text label.
   ============================================================ */
.badge{display:inline-flex;align-items:center;gap:6px;padding:3px 8px;border-radius:var(--r-pill);
  font-size:var(--fs-xs);font-weight:650;white-space:nowrap;border:1px solid transparent}
.badge.dot:before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor;flex:none}
/* Investment and account-type pills use filled backgrounds in both themes. */
.badge.invest-open{background:var(--funded-bg);color:var(--funded);border-color:transparent}
.badge.invest-full{background:var(--neutral-bg);color:var(--neutral);border-color:transparent}
.badge.account-type-cfd{background:var(--accent-soft);color:var(--accent-ink);border-color:transparent}
.lc-step1{background:var(--step1-bg);color:var(--step1)}
.lc-step2{background:var(--step2-bg);color:var(--step2)}
.lc-funded{background:var(--funded-bg);color:var(--funded)}
.lc-dead{background:var(--dead-bg);color:var(--dead)}
.cap-open{background:transparent;border-color:#a9cbba;color:var(--funded)}
.cap-partial{background:transparent;border-color:#bcc9d8;color:var(--step1)}
.cap-full{background:transparent;border-color:var(--line-2);color:var(--ink-3)}
.cap-paused{background:transparent;border-color:#dcc290;color:var(--step2)}
.cap-closed{background:transparent;border-color:var(--line-2);color:var(--ink-3)}
/* Explicitly flag EA-prohibited firms in red without changing lifecycle badges. */
.ea-status-tag.cap-closed{background:#fff1f2;border-color:#e11d48;color:#be123c;font-weight:700}
.ea-status-tag.cap-closed:hover{background:#ffe4e6;border-color:#be123c;color:#9f1239}

/* ============================================================
   Reporting status — a THIRD badge family, on purpose unlike the other two.
   Lifecycle is a filled pill with a dot, capacity an outlined pill; reporting
   is a dot and plain text. The three dimensions are independent and must never
   be mistaken for one another. The label always carries the meaning.
   ============================================================ */
.sync{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);
  color:var(--ink-2);white-space:nowrap}
.sync:before{content:"";width:7px;height:7px;border-radius:50%;flex:none;background:var(--ink-3)}
.sync.t-good:before{background:var(--funded)}
.sync.t-warn:before{background:var(--step2)}
.sync.t-bad:before{background:var(--dead)}
.sync.t-idle:before{background:transparent;box-shadow:inset 0 0 0 1.5px var(--line-2)}
.sync.t-bad{color:var(--dead)}

/* freshness line shown to investors — no infrastructure wording */
.fresh{margin:0;font-size:var(--fs-sm);color:var(--ink-3);display:inline-flex;
  align-items:center;gap:6px;line-height:1.5}
.fresh:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--funded);flex:none}
.fresh.is-late{color:var(--step2)}
.fresh.is-late:before{background:var(--step2)}
p.fresh{display:flex;margin-top:8px}

.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:var(--fs-sm)}

/* ============================================================
   Tables — one markup, two layouts (desktop rows / mobile records)
   ============================================================ */
.tbl-wrap{overflow-x:auto}
.tbl{width:100%;font-size:var(--fs-md)}
.tbl th,.tbl td{padding:10px 14px;text-align:left;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl thead th{
  font-size:var(--fs-xs);font-weight:650;color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em;
  background:var(--surface-2);white-space:nowrap;border-bottom:1px solid var(--line)
}
.tbl tbody tr:last-child td{border-bottom:0}
.tbl td.mhead{display:none}
.tbl td:empty{display:none}
.cap-msg{display:block;font-size:var(--fs-xs);color:var(--ink-3);max-width:34ch;margin-top:4px;line-height:1.45}
.splits{display:flex;flex-direction:column;gap:2px;font-size:var(--fs-xs)}
.splits span{display:flex;justify-content:space-between;gap:12px}
.splits b{font-variant-numeric:tabular-nums}
.tbl td.r,.tbl th.r{text-align:right}
.tbl td.num{font-variant-numeric:tabular-nums}
.tbl tbody tr.clickable{cursor:pointer}
.tbl tbody tr.clickable:hover{background:var(--surface-2)}
/* Highlight rows where the investor can still take a part. */
.tbl tbody tr.invest-available{background:color-mix(in srgb,var(--funded-bg) 60%,transparent)}
.tbl tbody tr.invest-available.clickable:hover{background:var(--funded-bg)}
.tbl tbody tr.dim td:not(.keep){color:var(--ink-3)}
.tbl .cell-strong{font-weight:620;color:var(--ink)}
.firm-cell{display:flex;align-items:center;gap:9px;min-width:0}
.id-cell{display:flex;align-items:baseline;gap:7px;min-width:0}
.id-cell b{font-weight:620;color:var(--ink)}
.id-sub{color:var(--ink-3);font-variant-numeric:tabular-nums;white-space:nowrap}
/* Firm mark: the monogram is the base layer, the real icon is laid over it and
   only revealed once it has actually loaded — so offline, a blocked request or a
   dead domain degrades to a clean tinted monogram instead of a broken image. */
.firm-mark{position:relative;width:26px;height:26px;border-radius:6px;flex:none;overflow:hidden;
  display:grid;place-items:center;background:var(--brand,#1d2733);
  box-shadow:inset 0 0 0 1px rgba(18,26,36,.12)}
.firm-mark i{font-style:normal;color:#fff;font-size:8px;font-weight:800;letter-spacing:-.04em;
  line-height:1;padding:0 1px;text-align:center}
.firm-mark img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;
  background:#fff;padding:2px;opacity:0;transition:opacity .12s ease-out}
.firm-mark img.ok{opacity:1}
.firm-mark.lg{width:34px;height:34px;border-radius:8px}
.firm-mark.lg i{font-size:10px}
.firm-mark.lg img{padding:3px}

/* grade chip — the admin's own rating, coloured by risk band.
   Never colour alone: the letter grade carries the meaning. */
.grade{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:18px;
  padding:0 5px;border-radius:5px;font-size:10px;font-weight:800;letter-spacing:-.02em;
  border:1px solid;flex:none;font-variant-numeric:tabular-nums}
.grade.g-green{background:var(--funded-bg);border-color:#bfe0d3;color:var(--funded)}
.grade.g-amber{background:var(--step2-bg);border-color:#e6d2a6;color:var(--step2)}
.grade.g-orange{background:#fdf0e4;border-color:#eccfae;color:#9a5716}
.grade.g-red{background:var(--dead-bg);border-color:#eec9c8;color:var(--dead)}
.grade.g-gray{background:var(--surface-2);border-color:var(--line-2);color:var(--ink-2)}

/* ranked shortlist */
.rank{width:20px;flex:none;text-align:right;font-size:var(--fs-sm);font-weight:700;
  color:var(--ink-3);font-variant-numeric:tabular-nums}
.firm-site-link{display:inline-flex;align-items:center;gap:9px;min-width:0;
  color:inherit;text-decoration:none}
.firm-site-link:hover .firm-site-name{text-decoration:underline;text-underline-offset:2px}
.firm-site-link:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}
.firm-site-link>span:last-child{color:var(--ink-3);font-size:var(--fs-sm)}
.count-pill{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:var(--r-pill);
  background:var(--surface-3);color:var(--ink-3);font-size:var(--fs-xs);font-weight:700;
  vertical-align:middle;font-variant-numeric:tabular-nums}

.meter{display:flex;align-items:center;gap:9px;min-width:132px}
.meter-bar{flex:1;height:5px;background:var(--surface-3);border-radius:var(--r-pill);overflow:hidden;min-width:56px}
.meter-bar i{display:block;height:100%;background:var(--accent);border-radius:var(--r-pill)}
.meter-bar.is-full i{background:var(--ink-3)}
.meter-val{font-size:var(--fs-sm);font-variant-numeric:tabular-nums;color:var(--ink-2);min-width:38px;text-align:right}

/* ============================================================
   Key/value lists
   ============================================================ */
.kv{display:flex;justify-content:space-between;align-items:baseline;gap:16px;
  padding:8px 0;border-bottom:1px solid var(--line);font-size:var(--fs-md)}
.kv:last-child{border-bottom:0}
.kv dt,.kv .k{color:var(--ink-3);font-size:var(--fs-sm)}
.kv dd,.kv .v{margin:0;text-align:right;font-weight:620;font-variant-numeric:tabular-nums}
.kv.em .v{font-size:var(--fs-lg)}
dl.kvlist{margin:0}
.kv-note{font-size:var(--fs-xs);color:var(--ink-3);margin:6px 0 0;line-height:1.5}

.ref-code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:22px;
  font-weight:700;letter-spacing:.06em;background:var(--surface-2);border-radius:8px;
  padding:12px 16px;margin:0;text-align:center;color:var(--ink)}

.rows{display:flex;flex-direction:column}
.row{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:11px 14px;border-bottom:1px solid var(--line)}
.row:last-child{border-bottom:0}
.row-main{min-width:0}
.row-title{font-weight:620;font-size:var(--fs-md)}
.row-sub{font-size:var(--fs-sm);color:var(--ink-3);margin-top:2px}
.row-side{display:flex;align-items:center;gap:10px;flex:none}

/* ============================================================
   Trading calendar
   Tints stay in the restrained lifecycle palette rather than the saturated
   red/green of trading platforms; the sign on the amount carries the meaning,
   so colour is never the only cue.
   ============================================================ */
.cal-nav{display:flex;align-items:center;gap:6px}
.cal-month{font-size:var(--fs-md);font-weight:650;min-width:12ch;text-align:center}
.cal-stats{display:flex;gap:16px;font-size:var(--fs-sm);color:var(--ink-3);flex-wrap:wrap}
.cal-stats b{margin-left:5px;color:var(--ink);font-variant-numeric:tabular-nums}

.cal{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:1px;
  background:var(--line);border:1px solid var(--line);border-radius:var(--r-ctl);overflow:hidden}
.cal-dow{background:var(--surface-2);padding:7px 8px;font-size:var(--fs-xs);font-weight:650;
  color:var(--ink-3);text-transform:uppercase;letter-spacing:.05em}
.cal-cell{background:var(--surface);min-height:74px;padding:6px 8px;display:flex;
  flex-direction:column;gap:2px}
.cal-num{font-size:var(--fs-xs);color:var(--ink-3);font-variant-numeric:tabular-nums}
.cal-cell.is-out{background:var(--surface-2)}
.cal-cell.is-out .cal-num{opacity:.5}
.cal-cell.is-pos{background:var(--funded-bg)}
.cal-cell.is-neg{background:var(--dead-bg)}
.cal-cell.is-traded{background:var(--surface-2)}
/* the cell is a flex column, so the pill has to opt out of stretching */
.cal-cell.is-today .cal-num{display:grid;place-items:center;align-self:flex-start;
  width:19px;height:19px;border-radius:var(--r-pill);background:var(--ink);color:#fff;font-weight:700}
.cal-pnl{font-size:var(--fs-sm);font-weight:680;font-variant-numeric:tabular-nums;
  margin-top:auto;white-space:nowrap}
.cal-cell.is-pos .cal-pnl{color:var(--pos)}
.cal-cell.is-neg .cal-pnl{color:var(--neg)}
.cal-cell.is-traded .cal-pnl{color:var(--ink)}
.cal-n{font-size:10px;color:var(--ink-3)}

/* stacked list used instead of the grid on narrow screens */
.cal-list{display:none}
.cal-row{display:flex;align-items:baseline;gap:12px;padding:9px 0;
  border-bottom:1px solid var(--line);font-size:var(--fs-md)}
.cal-row:last-child{border-bottom:0}
.cal-row-d{flex:1;font-variant-numeric:tabular-nums}
.cal-row-n{font-size:var(--fs-xs);color:var(--ink-3)}
.cal-row b{font-variant-numeric:tabular-nums}

@media (max-width:1100px){ .cal-n{display:none} .cal-cell{min-height:64px} }
@media (max-width:640px){
  .cal{display:none}
  .cal-list{display:block}
}

/* ============================================================
   Notes / inline messages
   ============================================================ */
.note{border-radius:var(--r-ctl);padding:10px 12px;font-size:var(--fs-sm);line-height:1.5;
  border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2)}
.note b{color:var(--ink)}
.note.info{background:var(--accent-soft);border-color:#d3e0ed;color:#2b4a6b}
.note.info b{color:#1f3b58}
.note.warn{background:var(--step2-bg);border-color:#ecd9ae;color:#7a5610}
.note.warn b{color:#63450b}
.note.danger{background:var(--dead-bg);border-color:#eec9c8;color:#8f3634}
.note.danger b{color:#782c2a}
.note.ok{background:var(--funded-bg);border-color:#bfe0d3;color:#0e6349}
.note+.note{margin-top:8px}
/* CFD allocation lock banner must breathe before its investors card. */
.fieldset > .note + .rows.boxed{margin-top:12px}

.empty{padding:28px 20px;text-align:center}
.empty h3{font-size:var(--fs-lg);font-weight:650}
.empty p{margin:6px auto 0;max-width:46ch;color:var(--ink-3);font-size:var(--fs-sm)}
.empty .btn-row{justify-content:center;margin-top:14px}

/* ============================================================
   Lifecycle track
   ============================================================ */
.track{display:grid;grid-template-columns:repeat(4,1fr);gap:0;margin:0}
.track-step{position:relative;text-align:center;padding-top:2px}
.track-step:before{content:"";position:absolute;top:9px;left:-50%;right:50%;height:2px;background:var(--line-2)}
.track-step:first-child:before{display:none}
.track-dot{position:relative;z-index:1;width:18px;height:18px;margin:0 auto 6px;border-radius:50%;
  display:grid;place-items:center;background:var(--surface-3);color:var(--ink-3);
  font-size:9px;font-weight:800;border:2px solid var(--surface)}
.track-step.done .track-dot{background:var(--funded);color:#fff}
.track-step.done:before{background:var(--funded)}
.track-step.current .track-dot{background:var(--accent);color:#fff}
.track-step.current:before{background:var(--accent)}
.track-step.dead .track-dot{background:var(--dead);color:#fff}
.track-step.dead:before{background:var(--dead)}
.track-step label{display:block;font-size:var(--fs-xs);font-weight:650;color:var(--ink-2)}
.track-step small{display:block;font-size:10px;color:var(--ink-3);margin-top:1px}
.track-step.upcoming label{color:var(--ink-3);font-weight:550}
.track-step.clickable{cursor:pointer;border-radius:8px}
.track-step.clickable:hover,.track-step.clickable:focus-visible{background:var(--surface-2);outline:none}
.track-step.clickable:focus-visible{box-shadow:0 0 0 2px var(--accent)}

.timeline{display:flex;flex-direction:column;gap:0;margin:0;padding:0;list-style:none}
.timeline li{position:relative;padding:0 0 12px 18px;border-left:1px solid var(--line);margin-left:4px}
.timeline li:last-child{padding-bottom:0;border-left-color:transparent}
.timeline li:before{content:"";position:absolute;left:-4px;top:5px;width:7px;height:7px;border-radius:50%;
  background:var(--line-2);border:1px solid var(--surface)}
.timeline li.dead:before{background:var(--dead)}
.timeline li.ok:before{background:var(--funded)}
.timeline b{display:block;font-size:var(--fs-md);font-weight:620}
.timeline span{font-size:var(--fs-xs);color:var(--ink-3)}

/* ============================================================
   Forms
   ============================================================ */
.form{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.field{display:flex;flex-direction:column;gap:5px;min-width:0}
.field.full{grid-column:1/-1}
.field>label{font-size:var(--fs-sm);font-weight:620;color:var(--ink-2)}
.field .req{color:var(--dead);margin-left:2px}
.input,.field input,.field select,.field textarea{
  width:100%;height:var(--h-ctl);border:1px solid var(--line-2);border-radius:var(--r-ctl);
  padding:0 10px;background:var(--surface);outline:0;font-size:var(--fs-md);
}
.field select{appearance:none;padding-right:30px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M3 4.5 6 8l3-3.5' fill='none' stroke='%23606975' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 10px center}
.field textarea{height:auto;min-height:70px;padding:9px 10px;resize:vertical;line-height:1.5}
.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--focus);box-shadow:var(--ring)}
.field input:disabled,.field select:disabled{background:var(--surface-3);color:var(--ink-3);cursor:not-allowed}
.field .hint{font-size:var(--fs-xs);color:var(--ink-3);line-height:1.45}
.field .err{font-size:var(--fs-xs);color:var(--dead);font-weight:600}
.field.invalid input,.field.invalid select,.field.invalid textarea{border-color:#cf7b79;background:#fffbfb}
.field.invalid input:focus,.field.invalid select:focus{box-shadow:0 0 0 3px rgba(169,63,61,.18)}
.input-affix{position:relative;display:flex;align-items:center}
.input-affix input{padding-right:34px}
.input-affix .affix{position:absolute;right:11px;font-size:var(--fs-sm);color:var(--ink-3);pointer-events:none}
.fieldset{border:0;padding:0;margin:0;min-width:0}
.fold-field>summary{cursor:pointer;list-style:none;font-size:var(--fs-xs);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);padding:6px 0}
.fold-field>summary::-webkit-details-marker{display:none}
.fold-field>summary::before{content:'▸';margin-right:6px}
.fold-field[open]>summary::before{content:'▾'}
.fold-field>summary:hover{color:var(--ink)}
.fold-field[open]>summary{margin-bottom:6px}
.fieldset legend{font-size:var(--fs-xs);font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--ink-3);padding:0 0 8px}
.equity-curve{width:100%;height:auto;display:block;overflow:visible}
.equity-curve circle[fill="transparent"]{cursor:default}

.stepper{display:inline-flex;align-items:center;border:1px solid var(--line-2);border-radius:var(--r-ctl);overflow:hidden;height:var(--h-ctl)}
.stepper button{border:0;background:var(--surface-2);width:30px;height:100%;color:var(--ink-2);font-size:15px;line-height:1}
.stepper button:hover:not(:disabled){background:var(--surface-3)}
.stepper button:disabled{opacity:.35;cursor:not-allowed}
.stepper output{width:38px;text-align:center;font-weight:680;font-variant-numeric:tabular-nums}
.switch{display:inline-flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--ink-2);cursor:pointer}
.switch input{position:absolute;opacity:0;width:0;height:0}
.switch .track2{width:34px;height:19px;border-radius:var(--r-pill);background:var(--line-2);position:relative;
  transition:background .15s;flex:none}
.switch .track2:after{content:"";position:absolute;top:2px;left:2px;width:15px;height:15px;border-radius:50%;
  background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.25);transition:left .15s}
.switch input:checked + .track2{background:var(--step2)}
.switch input:checked + .track2:after{left:17px}
.switch input:focus-visible + .track2{box-shadow:var(--ring)}

/* ============================================================
   Drawer — the only creation/edit surface.
   Fixed 3-part flex layout: sticky head, scrolling body, sticky footer.
   The footer can never fall below the viewport at any height.
   ============================================================ */
.scrim{position:fixed;inset:0;background:rgba(15,22,30,.42);z-index:90}
.drawer{
  position:fixed;top:0;right:0;bottom:0;z-index:100;
  width:min(460px,100%);height:100vh;
  background:var(--surface);border-left:1px solid var(--line);
  box-shadow:-14px 0 40px rgba(15,22,30,.16);
  display:flex;flex-direction:column;
  animation:drawerIn .16s ease-out;
}
.drawer.wide{width:min(720px,100%)}
@keyframes drawerIn{from{transform:translateX(16px);opacity:0}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.drawer{animation:none}}
.drawer-head{
  flex:none;display:flex;align-items:flex-start;justify-content:space-between;gap:14px;
  padding:16px 18px;border-bottom:1px solid var(--line)
}
.drawer-head h2{font-size:var(--fs-lg)}
.drawer-head .sub{font-size:var(--fs-sm);color:var(--ink-3);margin-top:3px;max-width:52ch}
.drawer-body{flex:1 1 auto;min-height:0;overflow-y:auto;padding:16px 18px;display:flex;flex-direction:column;gap:14px}
.drawer-foot{
  flex:none;display:flex;align-items:center;justify-content:flex-end;gap:8px;
  padding:12px 18px;border-top:1px solid var(--line);background:var(--surface-2)
}
.drawer-foot .spacer{margin-right:auto;font-size:var(--fs-xs);color:var(--ink-3);max-width:38ch;line-height:1.4}
/* Mobile CFD participation: the confirm button remains available even when the
   browser hides the fixed drawer footer behind its address/navigation bars. */
.cfd-invest-mobile-action{display:none}
.drawer-foot.full-width-hint{flex-wrap:wrap}
.drawer-foot.full-width-hint .spacer{flex:0 0 100%;max-width:none;margin-right:0}
.close{width:30px;height:30px;flex:none;border:1px solid var(--line);background:var(--surface);
  border-radius:var(--r-ctl);display:grid;place-items:center;color:var(--ink-3)}
.close:hover{background:var(--surface-2);color:var(--ink)}
.drawer-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(244px,296px);gap:18px;align-items:start}
.aside-panel{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-card);padding:13px;
  position:sticky;top:0}
.aside-panel h4{font-size:var(--fs-sm);text-transform:uppercase;letter-spacing:.05em;color:var(--ink-3);
  font-weight:700;margin-bottom:9px}

/* confirm dialog — centred, small, destructive decisions only */
.confirm{position:fixed;z-index:100;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(440px,calc(100vw - 28px));background:var(--surface);border-radius:var(--r-card);
  box-shadow:0 22px 60px rgba(15,22,30,.28);display:flex;flex-direction:column;max-height:88vh}
.confirm .drawer-body{gap:12px}

/* ============================================================
   Toast — informational only; never the sole channel for errors
   ============================================================ */
.toast-host{position:fixed;right:18px;bottom:18px;z-index:150;display:flex;flex-direction:column;gap:8px;
  pointer-events:none;max-width:min(360px,calc(100vw - 36px))}
.toast{background:#1c2430;color:#fff;padding:10px 13px;border-radius:var(--r-ctl);
  box-shadow:0 10px 28px rgba(0,0,0,.24);font-size:var(--fs-sm);animation:toastIn .18s ease-out}
.toast.good{background:#125c46}
.toast.bad{background:#8b3230}
@keyframes toastIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}

/* ============================================================
   Responsive
   ============================================================ */
@media (max-width:1360px){
  .cols{grid-template-columns:1fr}
}
@media (max-width:940px){
  .duo{grid-template-columns:1fr}
}
@media (max-width:1100px){
  .metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .metric:nth-child(3){border-left:0}
  .metric:nth-child(n+3){border-top:1px solid var(--line)}
}
/* small laptops & below — sidebar becomes an off-canvas sheet holding EVERY route */
@media (max-width:1180px){
  :root{--sidebar:0px}
  .hamburger{display:inline-flex}
  .main{padding-left:18px;padding-right:18px}
  .sidebar{
    transform:translateX(-100%);transition:transform .18s ease;
    width:266px;box-shadow:6px 0 30px rgba(15,22,30,.18)
  }
  body.nav-open .sidebar{transform:none}
  body.nav-open .nav-scrim{display:block;position:fixed;inset:var(--topbar) 0 0 0;
    background:rgba(15,22,30,.38);z-index:45}
  .who .uname{display:none}
}
/* Tablet portrait is too narrow for these tables but too wide for phone
   layout rules, so the record presentation starts before the rest.
   1000px is where the densest table stops fitting: "Mes investissements"
   reaches ~937px once the "Remboursé" column is present. */
@media (max-width:1000px){
  /* Tables become records. The column spec decides what each cell does here:
     data-m="hide" drops it, data-m="block" gives it a full-width row, and the
     row header carries identity + status. Same markup, no duplication. */
  .tbl-wrap{overflow:visible}
  .tbl{min-width:0!important;display:block}
  .tbl thead{display:none}
  .tbl tbody,.tbl tr,.tbl td{display:block;width:auto}
  .tbl tbody tr{border-bottom:1px solid var(--line);padding:12px 14px}
  .tbl tbody tr:last-child{border-bottom:0}

  .tbl td{border:0;padding:4px 0;display:flex;align-items:baseline;justify-content:space-between;
    gap:14px;text-align:right}
  .tbl td:before{content:attr(data-label);font-size:var(--fs-xs);font-weight:650;color:var(--ink-3);
    text-transform:uppercase;letter-spacing:.05em;text-align:left;flex:none;line-height:1.5}
  .tbl td[data-label=""]:before{display:none}

  /* record header — identity left, status right */
  .tbl td.mhead{display:flex;align-items:center;justify-content:space-between;gap:10px;
    padding:0 0 10px;text-align:left;font-weight:650;font-size:var(--fs-md)}
  .tbl td.mhead:before{display:none}
  .mhead-main{display:flex;align-items:center;gap:9px;min-width:0}
  .mhead-main>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .tbl td .id-cell{flex-wrap:wrap}
  .mhead-side{flex:none;display:flex;align-items:center;gap:8px}
  .mhead-meta{font-weight:550;color:var(--ink-3);font-size:var(--fs-sm)}
  .tbl tbody tr.dim .mhead-main{color:var(--ink-3)}

  /* columns that belong in the detail view, not on a phone */
  .tbl td[data-m="hide"]{display:none}

  /* composite cells get a full-width row, left aligned */
  .tbl td[data-m="block"]{display:block;text-align:left;padding-top:8px}
  .tbl td[data-m="block"]:before{display:block;margin-bottom:5px}
  .tbl td[data-m="block"] .cap-b{display:none}
  .tbl td[data-m="block"] .cap-msg{max-width:none;margin-top:0}
  .tbl td[data-m="block"] .btn{width:100%}
  .tbl td[data-m="block"] .mini-select{width:100%}
  .tbl td[data-m="block"] .splits{font-size:var(--fs-sm)}

  .tbl td.lead{justify-content:flex-start}
  .tbl td.lead:before{display:none}
  .meter{width:100%;min-width:0}

  /* filters scroll instead of wrapping onto a second row */
  .segmented{flex-wrap:nowrap;overflow-x:auto;max-width:100%;scrollbar-width:none}
  .segmented::-webkit-scrollbar{display:none}
}
@media (max-width:760px){
  .page-head{flex-direction:column;gap:12px}
  .page-actions{width:100%}
  .page-actions .btn{flex:1 1 0;min-width:0;white-space:normal;overflow-wrap:anywhere;text-align:center}
  .metrics{grid-template-columns:1fr}
  .metric{border-left:0}
  .metric:nth-child(n+2){border-top:1px solid var(--line)}
  .form{grid-template-columns:1fr}
  .field.full{grid-column:auto}
  .drawer,.drawer.wide{left:0;right:0;width:auto;height:100vh;height:100dvh;max-height:100dvh;min-height:0;overflow:hidden}
  .drawer-foot{padding-bottom:calc(12px + env(safe-area-inset-bottom, 0px))}
  .cfd-invest-mobile-action{display:block;margin:12px 0}
  .cfd-invest-mobile-action .btn{display:block;width:100%;min-height:46px;white-space:normal}
  /* Footer confirmation remains for desktop; mobile uses the in-content action only. */
  .drawer-foot [data-act="cfd-invest-confirm"]{display:none}
  .drawer-split{grid-template-columns:1fr}
  .aside-panel{position:static}
  /* stacked footer: the primary action sits on top and long labels never truncate */
  .drawer-foot{flex-direction:column-reverse;align-items:stretch;gap:8px}
  .drawer-foot .spacer{display:none}
  .drawer-foot.full-width-hint{flex-direction:column}
  .drawer-foot.full-width-hint .spacer{display:block;flex:none}
  .drawer-foot .btn{width:100%;min-width:0;white-space:normal;overflow-wrap:anywhere;text-align:center}
  .roleswitch button{padding:5px 9px}
  .main{padding-top:calc(var(--topbar) + 14px);
    padding-bottom:calc(var(--bottomnav) + env(safe-area-inset-bottom, 0px) + 20px)}

  /* Native-app tab bar replaces the hamburger + off-canvas sidebar entirely
     at this width -- a phone screen is too narrow for a slide-out list to
     feel like anything other than a detour. */
  .hamburger,.sidebar,.nav-scrim{display:none}
  .btn-exit{display:none} /* still reachable: the bottom nav's "Plus" sheet */

  .bottomnav{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:70;
    height:calc(var(--bottomnav) + env(safe-area-inset-bottom, 0px));
    padding-bottom:env(safe-area-inset-bottom, 0px);
    background:var(--surface);border-top:1px solid var(--line);
    box-shadow:0 -4px 16px rgba(15,22,30,.06);
  }
  .bottomnav-item{
    flex:1 1 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
    border:0;background:transparent;color:var(--ink-3);font-size:11px;font-weight:600;
    padding:6px 2px 0;min-width:0;
  }
  .bottomnav-item span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .bottomnav-item svg{opacity:.8}
  .bottomnav-item[aria-current="page"],.bottomnav-item[aria-expanded="true"]{color:var(--ink)}
  .bottomnav-item[aria-current="page"] svg,.bottomnav-item[aria-expanded="true"] svg{opacity:1}

  .sheet-scrim{display:block;position:fixed;inset:0;background:rgba(15,22,30,.42);z-index:95}
  .sheet{
    position:fixed;left:0;right:0;bottom:0;z-index:100;max-height:72vh;
    background:var(--surface);border-radius:16px 16px 0 0;
    box-shadow:0 -14px 40px rgba(15,22,30,.18);
    padding:10px 10px calc(14px + env(safe-area-inset-bottom, 0px));
    display:flex;flex-direction:column;overflow-y:auto;
    animation:sheetIn .18s ease-out;
  }
  @keyframes sheetIn{from{transform:translateY(16px);opacity:0}to{transform:none;opacity:1}}
  @media (prefers-reduced-motion:reduce){.sheet{animation:none}}
  .sheet-handle{width:36px;height:4px;border-radius:var(--r-pill);background:var(--line-2);
    margin:0 auto 10px}
  .sheet-nav{display:flex;flex-direction:column;gap:1px}
  .sheet-item{
    display:flex;align-items:center;gap:12px;width:100%;
    border:0;background:transparent;color:var(--ink);
    padding:12px 10px;border-radius:var(--r-ctl);text-align:left;font-size:var(--fs-md);font-weight:600;
  }
  .sheet-item:hover{background:var(--surface-2)}
  .sheet-item svg{flex:none;opacity:.75}
  .sheet-item-exit{color:var(--neg);border-top:1px solid var(--line);margin-top:6px;padding-top:14px}
}
/* A row whose side holds a button squeezes its text badly on a phone:
   give the text the full width and drop the controls underneath. */
@media (max-width:560px){
  .row:not(.firm-shortlist-card):has(.row-side .btn){flex-direction:column;align-items:stretch;gap:10px}
  .row:not(.firm-shortlist-card):has(.row-side .btn) .row-side{justify-content:flex-start}
  .row-title{line-height:1.35}
}
@media (max-width:420px){
  .topbar{padding:0 12px;gap:8px}
  .brand span{display:none}
  .page-head h1{font-size:19px}
}
@media print{
  .topbar,.sidebar,.scrim,.drawer,.toast-host{display:none}
  .main{padding:0}
}


/* ============================================================
   Admin — strategies & backtests
   Dense evidence-first layout; intentionally not reused in investor views.
   ============================================================ */
.strategy-hero{
  display:grid;grid-template-columns:1fr;
  gap:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);
  overflow:hidden
}
.strategy-hero-main{padding:18px 20px}
.strategy-run-line{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.strategy-run-line h2{font-size:20px;letter-spacing:-.02em}
.strategy-hero-main p{margin:6px 0 0;color:var(--ink-3);font-size:var(--fs-sm)}
.strategy-hero-meta{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));background:var(--surface-2);border-top:1px solid var(--line)
}
.strategy-hero-meta>div{padding:11px 20px;border-left:1px solid var(--line)}
.strategy-hero-meta>div:first-child{border-left:0}
.strategy-hero-meta span,
.strategy-metrics span,
.strategy-live-grid span{
  display:block;font-size:var(--fs-xs);font-weight:650;letter-spacing:.04em;
  text-transform:uppercase;color:var(--ink-3)
}
.strategy-hero-meta b{display:block;margin-top:3px;font-size:var(--fs-sm);font-weight:650;overflow-wrap:anywhere}

.strategy-metrics{
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);overflow:hidden
}
.strategy-metrics>div{padding:13px 16px;border-left:1px solid var(--line)}
.strategy-metrics>div:first-child{border-left:0}
.strategy-metrics b{display:block;margin:5px 0 2px;font-size:18px;font-weight:680;line-height:1.2;overflow-wrap:anywhere}
.strategy-metrics small{display:block;color:var(--ink-3);font-size:var(--fs-xs)}

.strategy-layout{
  display:grid;grid-template-columns:minmax(0,1.45fr) minmax(300px,.75fr);gap:14px;align-items:start
}
.strategy-layout>.panel{min-width:0}
.strategy-layout--even{grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}
.strategy-checks{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 10px;margin-top:12px
}
.strategy-check{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:7px 10px;border:1px solid var(--line);border-radius:var(--r-ctl,8px);
  font-size:var(--fs-xs);background:var(--surface)
}
.strategy-check span{min-width:0;overflow-wrap:anywhere}
.strategy-check i{font-style:normal;font-weight:700;flex:none}
.strategy-check.ok i{color:var(--pos,#15803d)}
.strategy-check.ko{border-color:var(--neg,#b91c1c)}
.strategy-check.ko i{color:var(--neg,#b91c1c)}
.strategy-layout--even>.panel{height:100%}
.strategy-hero-main{display:flex;flex-direction:column;justify-content:center}
.row-sub,.row-title{overflow-wrap:anywhere}

.strategy-compare-head,
.strategy-compare-row{
  display:grid;grid-template-columns:minmax(120px,1.2fr) minmax(90px,.8fr) minmax(90px,.75fr) minmax(90px,.8fr);
  gap:10px;align-items:center
}
.strategy-compare-head{
  padding:0 0 7px;border-bottom:1px solid var(--line);
  font-size:var(--fs-xs);font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-3)
}
.strategy-compare-head>span:nth-child(n+2),.strategy-year-head>span:nth-child(n+2){text-align:right}
.strategy-compare-row{padding:10px 0;border-bottom:1px solid var(--line)}
.strategy-compare-row:last-child{border-bottom:0;padding-bottom:0}
.strategy-compare-label{font-weight:620}
.strategy-compare-value,.strategy-compare-delta{font-variant-numeric:tabular-nums;text-align:right}
.strategy-compare-delta{font-size:var(--fs-sm);font-weight:650}

.strategy-year-head,.strategy-year-row{
  display:grid;grid-template-columns:90px 1fr 1fr;gap:10px;align-items:center
}
.strategy-year-head{
  padding-bottom:7px;border-bottom:1px solid var(--line);
  color:var(--ink-3);font-size:var(--fs-xs);font-weight:700;text-transform:uppercase;letter-spacing:.04em
}
.strategy-year-row{padding:9px 0;border-bottom:1px solid var(--line)}
.strategy-year-row:last-child{border-bottom:0;padding-bottom:0}
.strategy-year-row>span:nth-child(n+2){text-align:right;font-variant-numeric:tabular-nums}
.strategy-year-row small{display:block;color:var(--ink-3);font-size:var(--fs-xs);font-weight:500;margin-top:2px}

.strategy-pass-list{list-style:none;margin:0;padding:0;display:grid;gap:0}
.strategy-pass-list li{
  display:grid;grid-template-columns:28px minmax(0,1fr) auto;gap:10px;align-items:center;
  padding:9px 0;border-bottom:1px solid var(--line)
}
.strategy-pass-list li:last-child{border-bottom:0;padding-bottom:0}
.strategy-pass-step{
  width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
  border:1px solid var(--line-2);background:var(--surface-2);font-size:var(--fs-xs);font-weight:700
}
.strategy-pass-list li.ok .strategy-pass-step{border-color:#b8d9cd;color:var(--funded);background:var(--funded-bg)}
.strategy-pass-list li.dead .strategy-pass-step{border-color:#edc6c5;color:var(--dead);background:var(--dead-bg)}
.strategy-pass-list b{display:block;font-size:var(--fs-sm);font-weight:650}
.strategy-pass-list div>span{display:block;color:var(--ink-3);font-size:var(--fs-xs);margin-top:1px}

.strategy-live-grid{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border:1px solid var(--line);
  border-radius:var(--r-ctl);overflow:hidden
}
.strategy-live-grid>div{padding:10px 12px;border-top:1px solid var(--line);border-left:1px solid var(--line)}
.strategy-live-grid>div:nth-child(-n+2){border-top:0}
.strategy-live-grid>div:nth-child(odd){border-left:0}
.strategy-live-grid b{display:block;margin-top:3px;font-size:15px;font-variant-numeric:tabular-nums}

.strategy-linked-row{
  width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:9px 0;border:0;border-bottom:1px solid var(--line);background:transparent;text-align:left
}
.strategy-linked-row:last-child{border-bottom:0;padding-bottom:0}
.strategy-linked-row:hover b{color:var(--accent-ink)}
.strategy-linked-row>span:first-child{display:flex;align-items:center;gap:9px;min-width:0}
.strategy-linked-row b,.strategy-linked-row small{display:block}
.strategy-linked-row small{color:var(--ink-3);font-size:var(--fs-xs);margin-top:1px}


.strategy-split{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-bottom:12px}
.strategy-split>div{padding:9px 12px;border:1px solid var(--line);border-radius:var(--r-ctl,8px);background:var(--surface)}
.strategy-split span{display:block;font-size:var(--fs-xs);font-weight:650;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-3)}
.strategy-split b{display:block;margin-top:3px;font-size:var(--fs-sm);font-variant-numeric:tabular-nums}
.strategy-split small{display:block;margin-top:2px;color:var(--ink-3);font-size:var(--fs-xs)}
.strategy-fam{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid var(--line)}
.strategy-fam:last-child{border-bottom:0;padding-bottom:0}
.strategy-fam b{display:block;font-size:var(--fs-sm);font-weight:650}
.strategy-fam small{display:block;color:var(--ink-3);font-size:var(--fs-xs);margin-top:1px}
.strategy-fam .badge{flex:none}

@media (max-width:1100px){
  .strategy-hero,.strategy-layout,.strategy-layout--even{grid-template-columns:1fr}
}
@media (max-width:760px){
  .strategy-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .strategy-metrics>div:nth-child(3){border-left:0;border-top:1px solid var(--line)}
  .strategy-metrics>div:nth-child(4){border-top:1px solid var(--line)}
  .strategy-hero-meta>div{padding:10px 12px}
  .strategy-hero-meta b{font-size:var(--fs-xs)}
  .strategy-compare-head,.strategy-compare-row{
    grid-template-columns:minmax(95px,1.1fr) minmax(70px,.8fr) minmax(65px,.7fr) minmax(70px,.8fr);
    gap:6px
  }
}
@media (max-width:520px){
  .strategy-split{grid-template-columns:1fr}
  .strategy-hero-meta{grid-template-columns:1fr 1fr}
  .strategy-hero-meta>div:last-child{grid-column:1 / -1;border-left:0;border-top:1px solid var(--line)}
  .strategy-checks{grid-template-columns:1fr}
  .strategy-metrics b{font-size:15px}
  .strategy-metrics>div{padding:11px 12px}
  .strategy-compare-head{display:none}
  .strategy-compare-row{
    grid-template-columns:1fr auto auto;grid-template-areas:
      "label label label"
      "candidate delta prod";
    gap:5px 10px
  }
  .strategy-compare-label{grid-area:label;color:var(--ink-3);font-size:var(--fs-xs)}
  .strategy-compare-value:nth-child(2){grid-area:candidate}
  .strategy-compare-delta{grid-area:delta}
  .strategy-compare-value:last-child{grid-area:prod}
  .strategy-year-head,.strategy-year-row{grid-template-columns:65px 1fr 1fr}
}

/* Dashboard: match the attention card to the capacity card without expanding the grid. */
.dashboard-capacity-grid{align-items:stretch}
.dashboard-capacity-grid>.panel{min-height:0}
.dashboard-capacity-grid>.panel:has(.rows-scroll){display:flex;flex-direction:column}
.dashboard-capacity-grid .rows-scroll{flex:1 1 auto;height:0;min-height:0;max-height:none;overflow-y:auto;overscroll-behavior:contain}
@media(max-width:720px){.dashboard-capacity-grid .rows-scroll{height:auto;max-height:300px}}

/* Dashboard attention card: bounded height, scrolls inside instead of stretching the page */
.rows-scroll { max-height: 340px; overflow-y: auto; overscroll-behavior: contain; }
@media (max-width: 720px) { .rows-scroll { max-height: 300px; } }

/* ============================================================
   Projection des revenus mensuels : composants existants (.metrics, .panel, .tbl, .note) ;
   seuls ces détails sont propres à la carte
   ============================================================ */
.proj-h{font-size:var(--fs-lg);font-weight:650;margin:18px 0 8px}
/* a simulated loss is neither a gain nor a debt: neutral ink, italic, never the red/green of real P&L */

/* Détail des projections (admin) : mêmes composants (.segmented, .input, .metrics, .tbl, .btn) ; seulement la mise en page des groupes */
.proj-search{margin-bottom:10px}
.proj-search .input{max-width:520px}
.proj-tools{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end;margin-bottom:12px}
.proj-sel{display:flex;flex-direction:column;gap:3px;font-size:var(--fs-sm);color:var(--ink-3);min-width:150px}
.proj-sel .input{width:auto;min-width:150px;color:var(--ink)}
.proj-list{margin-top:14px;border:1px solid var(--line);border-radius:var(--r-card);overflow:hidden}
.proj-row{display:grid;grid-template-columns:minmax(0,2fr) repeat(3,minmax(0,1fr));gap:8px;align-items:center;padding:10px 14px}
.proj-gh{background:var(--surface-2);color:var(--ink-3);font-size:var(--fs-sm);border-bottom:1px solid var(--line)}
.proj-row .r{text-align:right}
.proj-group{border-top:1px solid var(--line)}
.proj-gh+.proj-group{border-top:0}
.proj-group>summary{cursor:pointer;list-style:none}
.proj-group>summary::-webkit-details-marker{display:none}
.proj-group>summary:hover{background:var(--surface-2)}
.proj-group[open]>summary{background:var(--surface-2)}
.proj-lead{display:flex;flex-direction:column;gap:2px;min-width:0}
@media (max-width:720px){
  .proj-gh{display:none}
  .proj-row{grid-template-columns:repeat(3,minmax(0,1fr));row-gap:6px}
  .proj-row .proj-lead{grid-column:1/-1}
  .proj-row .r[data-label]::before{content:attr(data-label);display:block;font-size:var(--fs-sm);color:var(--ink-3)}
  .proj-sel,.proj-sel .input{min-width:0;width:100%}
  .proj-tools>*{flex:1 1 140px}
  .proj-tools .segmented{flex:1 1 100%}
  .proj-tools .segmented button{flex:1}
}


/* Short EA condition: readable on desktop and mobile without changing layout. */


/* Keep prop-firm shortlist rows compact on phones. The generic :has() rule above
   stacks other button rows, not these ranked entries. */
.firm-shortlist-compact .firm-shortlist-card{
  display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;
  gap:8px 12px;padding:10px 12px;min-height:0;height:auto
}
.firm-shortlist-compact .firm-shortlist-card .row-main{
  display:flex;flex-direction:row;align-items:center;flex-wrap:wrap;
  flex:1 1 270px;width:auto;min-width:0;min-height:0;gap:6px 9px
}
.firm-shortlist-compact .firm-shortlist-card .row-side{
  display:flex;flex:0 0 auto;width:auto;padding:0;margin-left:auto;
  align-items:center;justify-content:flex-end
}
.firm-shortlist-compact .firm-site-link{
  display:inline-flex;align-items:center;gap:8px;min-width:0;
  flex:0 1 auto;max-width:100%;white-space:normal
}
.firm-shortlist-compact .firm-site-name{
  white-space:normal;overflow-wrap:normal;word-break:normal;
  font-weight:650;line-height:1.35
}
@media(max-width:760px){
  .firm-shortlist-compact .firm-shortlist-card{gap:7px 10px;padding:10px 12px}
  .firm-shortlist-compact .firm-shortlist-card .row-main{
    flex:1 1 100%;width:100%;gap:6px 9px
  }
  .firm-shortlist-compact .firm-shortlist-card .row-side{
    margin-left:auto;width:auto;padding:0
  }
}

/* Direct access to EA requirements for challenges, without opening their account drawer. */
.account-ea-link{display:block;margin-top:7px}
.account-ea-link .btn{font-size:12px;padding:5px 9px}
.mhead .account-ea-link{display:none}
@media(max-width:760px){
  .tbl td.lead .account-ea-link{display:none}
  .mhead .account-ea-link{display:block;margin-top:8px}
}

/* Firm EA action and compact verified / missing / unknown checklist. */
.ea-status-tag{font:inherit;font-size:var(--fs-xs);font-weight:650;line-height:1.35;cursor:pointer;appearance:none;transition:filter .15s ease,box-shadow .15s ease}
.ea-status-tag:hover{filter:brightness(.94);text-decoration:underline;text-underline-offset:2px}
.ea-status-tag:focus-visible{outline:2px solid var(--accent,#2563eb);outline-offset:3px}
.ea-checklist{list-style:none;padding:0;margin:12px 0 18px;display:grid;gap:10px}
.ea-checklist li{display:flex;align-items:flex-start;gap:10px;line-height:1.45}
.ea-check-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 22px;width:22px;height:22px;border-radius:50%;font-size:14px;font-weight:750}
.ea-check-yes .ea-check-icon{color:#157347;background:rgba(21,115,71,.12)}
.ea-check-no .ea-check-icon{color:#b42318;background:rgba(180,35,24,.12)}
.ea-check-unknown .ea-check-icon{color:var(--muted,#6b7280);background:rgba(128,128,128,.12)}
.ea-proof-section h3:not(:first-child){margin-top:22px}


/* Projection admin: aligned responsive filters, consistent with Trading activity. */
.proj-search{margin:0 0 12px;min-width:0}
.proj-search #proj-search::placeholder{text-overflow:ellipsis}
.proj-search #proj-search{
 box-sizing:border-box;width:100%;max-width:none;min-width:0;height:42px;
 border:1px solid var(--line);border-radius:9px;padding:0 12px;font-size:13px;
}
.proj-tools{
 display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
 align-items:end;gap:10px 12px;margin:0 0 16px;min-width:0;
}
.proj-modebar{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 12px;min-width:0}
.proj-modebar .segmented{max-width:100%}
.proj-tools>.proj-sel{
 display:flex;flex-direction:column;gap:5px;min-width:0;width:100%;
 font-size:12px;color:var(--ink-3);
}
.proj-tools .proj-sel .input{
 box-sizing:border-box;min-width:0;width:100%;max-width:none;height:42px;
 border:1px solid var(--line);border-radius:9px;padding:0 12px;
 font-size:13px;color:var(--ink);background:var(--surface,#fff);
}
.proj-sortrow{display:flex;gap:8px;min-width:0}
.proj-sortrow .input{flex:1 1 0;min-width:0}
.proj-sortrow .btn,.proj-tools .proj-reset{height:42px;min-height:42px;white-space:nowrap;box-sizing:border-box}
.proj-sortrow .btn{flex:none}
.proj-tools>.proj-reset{justify-self:stretch}
.proj-reset[disabled]{opacity:.45;cursor:default}
@media(max-width:1100px){
 .proj-tools{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:560px){
 .proj-tools{gap:9px}
 .proj-modebar{flex-direction:column;align-items:stretch}
 .proj-modebar .segmented{width:100%}
 .proj-modebar .segmented button{flex:1;min-width:0}
 .proj-modebar .proj-reset{width:100%}
 .proj-tools>.proj-sortbox,.proj-modebar~.proj-sel-status{grid-column:1/-1}
}
@media(max-width:370px){
 .proj-tools{grid-template-columns:minmax(0,1fr)}
}
/* CFD account form follows the same two-column field system as drawers. */
.cfd-account-form{padding:18px 20px 8px;border-top:1px solid var(--line);margin-top:12px}
.cfd-account-form .btn-row{margin-top:16px}
@media(max-width:640px){.cfd-account-form{padding:16px 12px 8px}.cfd-account-form .form{grid-template-columns:1fr}}

/* Payout estimates: identical minimal cards on desktop and mobile. */
.proj-list,.proj-card-grid{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  gap:14px;align-items:stretch;min-width:0
}
.proj-list{border:0;border-radius:0;overflow:visible;margin-top:12px}
.proj-card-grid{margin:4px 0 0}
.proj-payout-tile{
  display:flex;flex-direction:column;gap:0;box-sizing:border-box;min-width:0;
  padding:16px;border:1px solid var(--line);border-radius:var(--r-card);
  background:var(--surface,#fff)
}
.proj-payout-head{min-width:0;margin:0 0 17px}
.proj-payout-head .firm-cell{min-width:0;max-width:100%}
.proj-payout-metrics{display:grid;gap:12px;min-width:0}
.proj-payout-metric{display:flex;flex-direction:column;gap:3px;min-width:0}
.proj-payout-label{font-size:12px;color:var(--ink-3);line-height:1.4}
.proj-payout-amount{font-size:clamp(19px,2.2vw,26px);line-height:1.25;overflow-wrap:anywhere;color:var(--ink)}
.proj-payout-delay{font-size:clamp(17px,1.8vw,22px);line-height:1.25;overflow-wrap:anywhere;color:var(--ink)}
.proj-payout-footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:4px 10px;
  margin-top:auto;padding-top:15px;font-size:12px;color:var(--ink-3)}
.proj-foot-muted{color:var(--ink-3)}
.proj-search{max-width:420px}
@media(max-width:1200px){
  .proj-list,.proj-card-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:700px){
  .proj-list,.proj-card-grid{grid-template-columns:minmax(0,1fr);gap:10px}
  .proj-payout-tile{padding:14px}
  .proj-payout-head{margin-bottom:13px}
  .proj-search{max-width:none}
}


/* ============================================================
   Private investor guide — restrained FirmPayout palette.
   Existing shell, panel and typography remain authoritative.
   ============================================================ */
.investor-guide{gap:14px}
.investor-guide .guide-section{min-width:0;padding:16px}
.investor-guide .guide-section-title{display:flex;align-items:center;gap:10px;margin:0 0 14px}
.investor-guide .guide-section-title::before{
  content:"";display:block;width:4px;height:19px;flex:none;
  border-radius:var(--r-pill);background:var(--funded)
}
.investor-guide .guide-section-title h2{font-size:var(--fs-lg);line-height:1.35}
.investor-guide .guide-choices,.investor-guide .guide-examples{
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px
}
.investor-guide .guide-choice,.investor-guide .guide-example{
  border:1px solid var(--line);border-radius:var(--r-card);min-width:0;
  background:var(--surface);overflow:hidden
}
.investor-guide .guide-choice{
  display:grid;grid-template-columns:minmax(120px,.76fr) minmax(0,1.24fr);
  gap:12px;padding:14px;align-items:center
}
.investor-guide .guide-choice-cfd{
  border-color:var(--line-2);background:linear-gradient(115deg,var(--funded-bg),var(--surface) 72%)
}
.investor-guide .guide-choice-art{
  display:flex;justify-content:center;align-items:center;min-width:0
}
.investor-guide .guide-art-svg{display:block;width:100%;max-width:230px;height:auto}
.investor-guide .guide-choice-text{display:flex;flex-direction:column;align-items:flex-start;gap:8px;min-width:0}
.investor-guide .guide-choice-text h3{font-size:16px;line-height:1.25}
.investor-guide .guide-type{
  display:inline-flex;align-items:center;justify-content:center;
  min-height:26px;padding:3px 11px;border-radius:var(--r-pill);
  background:var(--nav-2);color:var(--on-dark);font-weight:700;font-size:var(--fs-sm);white-space:nowrap
}
.investor-guide .guide-type-cfd{background:var(--funded);color:var(--surface)}
.investor-guide .guide-time{
  display:inline-flex;align-items:center;gap:6px;
  color:var(--funded);font-size:var(--fs-sm);font-weight:650;
  background:var(--funded-bg);border-radius:var(--r-ctl);padding:5px 8px;
  line-height:1.45
}
.investor-guide .guide-time svg{flex:none}
.investor-guide .guide-points{
  display:grid;gap:5px;margin:2px 0 0;padding:0;list-style:none;
  color:var(--ink-2);font-size:var(--fs-sm)
}
.investor-guide .guide-points li{position:relative;padding-left:19px}
.investor-guide .guide-points li::before{
  content:"✓";position:absolute;top:1px;left:0;
  display:grid;place-items:center;width:14px;height:14px;
  border-radius:50%;background:var(--funded);color:var(--surface);
  font-size:10px;line-height:1;font-weight:800
}
.investor-guide .guide-flow{
  margin:0;padding:12px;border:1px solid var(--line);border-radius:var(--r-card);
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;list-style:none
}
.investor-guide .guide-flow li{min-width:0;display:flex;align-items:center;gap:10px}
.investor-guide .guide-step-num{
  display:grid;place-items:center;flex:none;width:29px;height:29px;
  background:var(--funded);color:var(--surface);
  border-radius:var(--r-pill);font-weight:700
}
.investor-guide .guide-step-icon{color:var(--funded);display:inline-flex;flex:none}
.investor-guide .guide-step-copy{min-width:0;display:flex;flex-direction:column;line-height:1.35;gap:2px}
.investor-guide .guide-step-copy strong{font-size:var(--fs-md);font-weight:700}
.investor-guide .guide-step-copy span{font-size:var(--fs-sm);color:var(--ink-2)}
.investor-guide .guide-flow-foot{font-size:var(--fs-sm);color:var(--ink-3);margin:10px 0 0}
.investor-guide .guide-example{
  display:grid;grid-template-columns:minmax(105px,.72fr) minmax(0,1.28fr);
  align-items:stretch;padding:12px;gap:12px
}
.investor-guide .guide-example-visual{
  display:flex;flex-direction:column;align-items:flex-start;justify-content:space-between;
  gap:9px;min-width:0
}
.investor-guide .guide-example-visual .guide-art-svg{margin:auto;max-width:170px}
.investor-guide .guide-example-data{display:flex;flex-direction:column;justify-content:flex-end;min-width:0}
.investor-guide .guide-example dl{margin:0 0 9px;font-size:var(--fs-sm)}
.investor-guide .guide-example dl>div{
  display:flex;justify-content:space-between;gap:8px;
  padding:4px 0;border-bottom:1px solid var(--line)
}
.investor-guide .guide-example dt{color:var(--ink-2);min-width:0}
.investor-guide .guide-example dd{
  margin:0;text-align:right;font-weight:650;min-width:0;
  font-variant-numeric:tabular-nums
}
.investor-guide .guide-example .guide-share{color:var(--funded)}
.investor-guide .guide-example-result{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  border-radius:var(--r-ctl);padding:5px 7px 5px 10px;
  background:var(--funded-bg);font-size:var(--fs-sm)
}
.investor-guide .guide-result-amount{
  background:var(--funded);color:var(--surface);
  border-radius:var(--r-ctl);padding:5px 13px;
  font-size:18px;font-variant-numeric:tabular-nums;white-space:nowrap
}
.investor-guide .guide-risk{
  margin:12px 0 0;color:var(--ink-3);
  font-size:var(--fs-xs);line-height:1.5
}
@media(max-width:1120px){
  .investor-guide .guide-choice{grid-template-columns:minmax(100px,.65fr) minmax(0,1.35fr);padding:12px;gap:8px}
  .investor-guide .guide-choice-text h3{font-size:var(--fs-lg)}
  .investor-guide .guide-example{grid-template-columns:115px minmax(0,1fr);padding:10px;gap:8px}
  .investor-guide .guide-example-visual .guide-art-svg{max-width:130px}
}
@media(max-width:900px){
  .investor-guide .guide-choices,.investor-guide .guide-examples{grid-template-columns:minmax(0,1fr)}
  .investor-guide .guide-choice{grid-template-columns:180px minmax(0,1fr)}
  .investor-guide .guide-example{grid-template-columns:180px minmax(0,1fr)}
  .investor-guide .guide-example-visual .guide-art-svg{max-width:175px}
}
@media(max-width:760px){
  .investor-guide .guide-section{padding:12px}
  .investor-guide .guide-section-title{margin-bottom:10px}
  .investor-guide .guide-choice{grid-template-columns:100px minmax(0,1fr);gap:10px;padding:10px}
  .investor-guide .guide-choice-text{gap:5px}
  .investor-guide .guide-choice-text h3{font-size:var(--fs-md)}
  .investor-guide .guide-choice .guide-points{display:none}
  .investor-guide .guide-time{font-size:var(--fs-xs);padding:4px 6px}
  .investor-guide .guide-flow{grid-template-columns:1fr;gap:0;padding:2px 10px}
  .investor-guide .guide-flow li{padding:10px 0}
  .investor-guide .guide-flow li+li{border-top:1px solid var(--line)}
  .investor-guide .guide-flow-foot{font-size:var(--fs-xs)}
  .investor-guide .guide-example{grid-template-columns:95px minmax(0,1fr);padding:9px;gap:9px}
  .investor-guide .guide-example-visual .guide-art-svg{max-width:100px}
  .investor-guide .guide-example .guide-type{font-size:10px;padding:3px 7px;white-space:normal;text-align:center}
  .investor-guide .guide-example dl{font-size:var(--fs-xs)}
  .investor-guide .guide-example dl>div{padding:3px 0}
  .investor-guide .guide-result-amount{font-size:16px}
}
@media(max-width:360px){
  .investor-guide .guide-choice{grid-template-columns:77px minmax(0,1fr);gap:6px}
  .investor-guide .guide-example{grid-template-columns:72px minmax(0,1fr);gap:6px}
  .investor-guide .guide-example-result{padding:4px}
  .investor-guide .guide-result-amount{font-size:14px;padding:4px 7px}
}

/* Consistency inherits EXACTLY the financing .meter / .meter-bar / .meter-val
   geometry: same track height, baseline and percentage position.
   Only color and emphasis differ, while the caption uses the same .tiny
   .muted block as the financing amount below the bar. */
.tbl .score-meter .score-fill{background:var(--funded)}
.tbl .score-meter .score-value{font-weight:700;color:var(--ink)}
.tbl .score-meter .score-empty{color:var(--ink-3)}
.tbl .score-days{text-align:left}


/* Strategies & backtests — visual-first administration dashboard.
   Scoped components; no global table/drawer overrides. */
.strat2-board{display:grid;gap:14px}
.strat2-hero,.strat2-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-card);overflow:hidden;min-width:0}
.strat2-hero-main{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(245px,.7fr);
  align-items:center;gap:20px;padding:20px}
.strat2-eyebrow{color:var(--ink-3);font-size:var(--fs-xs);font-weight:750;
  text-transform:uppercase;letter-spacing:.08em}
.strat2-hero h2{font-size:24px;line-height:1.2;letter-spacing:-.03em;margin-top:6px;overflow-wrap:anywhere}
.strat2-hero h2 span{font-size:16px;font-weight:540;color:var(--ink-3)}
.strat2-hero-main p{color:var(--ink-3);font-size:var(--fs-sm);margin:8px 0 0}
.strat2-verdict{display:flex;align-items:center;gap:11px;padding:13px;
  background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-ctl)}
.strat2-verdict.is-ok{background:#f3f8f5;border-color:#d9e8df}
.strat2-verdict-icon{width:32px;height:32px;flex:none;border-radius:50%;display:grid;place-items:center;
  background:var(--surface-3);font-size:20px;font-weight:700;color:var(--ink-3)}
.strat2-verdict.is-ok .strat2-verdict-icon{background:var(--funded-bg);color:var(--funded)}
.strat2-verdict b{display:block;font-size:var(--fs-md);color:var(--ink)}
.strat2-verdict.is-ok b{color:var(--funded)}
.strat2-verdict small{display:block;font-size:var(--fs-xs);color:var(--ink-3);margin-top:3px}
.strat2-hero-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));background:var(--surface-2);
  border-top:1px solid var(--line)}
.strat2-hero-stats>div{padding:13px 20px;border-left:1px solid var(--line);min-width:0}
.strat2-hero-stats>div:first-child{border-left:0}
.strat2-hero-stats b{display:block;font-size:19px;line-height:1.2;font-weight:750;font-variant-numeric:tabular-nums}
.strat2-hero-stats small{display:block;font-size:var(--fs-xs);color:var(--ink-3);margin-top:4px}
.strat2-grid{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(0,.82fr);gap:14px;align-items:stretch}
.strat2-card-head{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:14px 16px;
  border-bottom:1px solid var(--line)}
.strat2-card-head h3{font-size:15px;font-weight:720}
.strat2-card-head small{display:block;color:var(--ink-3);font-size:var(--fs-xs);margin-top:3px;overflow-wrap:anywhere}
.strat2-card-body{padding:17px}
.strat2-tag{display:inline-block;background:var(--surface-3);color:var(--ink-2);border-radius:5px;
  padding:5px 8px;font-size:var(--fs-xs);font-weight:600;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.strat2-tag.is-green{background:var(--funded-bg);color:var(--funded)}
.strat2-tag{font-style:normal}
.strat2-tag.is-red{background:color-mix(in srgb,var(--neg) 14%,transparent);color:var(--neg)}
.strat2-tag.is-pending{background:var(--step2-bg);color:var(--step2)}
.strat2-profit-row+.strat2-profit-row{margin-top:19px}
.strat2-profit-top{display:flex;justify-content:space-between;align-items:baseline;gap:12px;
  font-size:var(--fs-sm);margin-bottom:8px}
.strat2-profit-top b{font-size:var(--fs-md);font-variant-numeric:tabular-nums}
.strat2-profit-track{height:11px;border-radius:4px;background:var(--surface-3);overflow:hidden}
.strat2-profit-fill{height:100%;background:#80909d;border-radius:4px}
.strat2-profit-fill.is-prod{background:var(--funded)}
.strat2-mini-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;
  margin-top:18px;padding-top:13px;border-top:1px solid var(--line)}
.strat2-mini-metrics>div{background:var(--surface-2);padding:10px 12px;border-radius:var(--r-ctl);min-width:0}
.strat2-mini-metrics span{display:block;font-size:var(--fs-xs);color:var(--ink-3)}
.strat2-mini-metrics strong{display:block;font-size:16px;font-variant-numeric:tabular-nums;margin-top:3px}
.strat2-mini-metrics small{display:block;font-size:var(--fs-xs);color:var(--ink-3);margin-top:3px}
.strat2-caption{font-size:var(--fs-xs);color:var(--ink-3);line-height:1.6;margin:12px 0 0}
.strat2-pipeline{display:flex;align-items:flex-start;justify-content:space-between;gap:3px;
  background:#f8faf9;border-radius:8px;padding:14px 10px;margin-bottom:17px}
.strat2-node{display:flex;flex:0 1 58px;flex-direction:column;align-items:center;gap:7px;min-width:0;text-align:center}
.strat2-node>span{border:1px solid var(--line-2);background:var(--surface-3);width:42px;height:42px;
  border-radius:50%;display:grid;place-items:center;font-size:var(--fs-sm);font-weight:700;color:var(--ink-3)}
.strat2-node.is-active>span{background:var(--funded-bg);border-color:#b5d9c9;color:var(--funded)}
.strat2-node small{font-size:10px;line-height:1.2;color:var(--ink-3)}
.strat2-pipeline>i{flex:1 1 15px;min-width:7px;height:1px;border-top:2px dashed var(--line-2);margin-top:21px}
.strat2-campaign-row{display:flex;align-items:center;justify-content:space-between;gap:10px}
.strat2-campaign-row strong{font-size:23px;line-height:1.4;font-weight:750;margin-right:6px}
.strat2-campaign-row small{font-size:var(--fs-xs);color:var(--ink-3)}
.strat2-progress{height:6px;background:var(--surface-3);border-radius:var(--r-pill);
  margin:12px 0;overflow:hidden}
.strat2-progress>span{height:100%;display:block;background:var(--funded);border-radius:inherit}
.strat2-year-chart{display:flex;align-items:stretch;justify-content:space-around;gap:9px;min-height:169px}
.strat2-year{flex:1;display:flex;min-width:0;flex-direction:column;align-items:center;
  justify-content:flex-end;gap:8px}
.strat2-year-value{font-size:var(--fs-xs);color:var(--ink-2);font-weight:650;
  white-space:nowrap;font-variant-numeric:tabular-nums}
.strat2-year-bar{display:block;width:100%;max-width:54px;border-radius:5px 5px 0 0;background:#8fb4a5;min-height:5px}
.strat2-year:last-child .strat2-year-bar{background:var(--funded)}
.strat2-year-bar.is-negative{background:var(--dead)!important}
.strat2-year b{font-size:var(--fs-sm);font-weight:650}
.strat2-gauges{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:15px}
.strat2-gauge{display:flex;align-items:center;gap:10px;min-width:0}
.strat2-gauge svg{height:52px;width:52px;flex:none;transform:rotate(-90deg)}
.strat2-gauge circle{fill:none;stroke-width:6}
.strat2-gauge-base{stroke:var(--surface-3)}
.strat2-gauge-value{stroke:#b28d53;stroke-linecap:round}
.strat2-gauge strong{display:block;font-size:16px;white-space:nowrap}
.strat2-gauge span{display:block;font-size:var(--fs-xs);color:var(--ink-3);margin-top:3px}
.strat2-capacity-note{font-size:var(--fs-xs);line-height:1.6;color:#745823;background:#faf6ee;
  border:1px solid #ebe1d1;border-radius:var(--r-ctl);padding:10px 12px}
.strat2-history{padding:1px 16px}
.strat2-history-row{display:grid;grid-template-columns:13px minmax(0,1fr) auto;
  align-items:center;gap:11px;width:100%;border:0;border-bottom:1px solid var(--line);
  background:transparent;color:var(--ink);padding:12px 0;text-align:left}
.strat2-history-row:last-child{border-bottom:0}
.strat2-history-row:hover{color:var(--accent-ink);background:var(--surface-2)}
.strat2-history-row:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.strat2-dot{width:9px;height:9px;border-radius:50%;background:#9ca8b3;display:inline-block}
.strat2-dot.is-complete{background:var(--funded)}
.strat2-history-title{min-width:0;overflow-wrap:anywhere}
.strat2-history-title b{display:block;font-size:var(--fs-sm)}
.strat2-history-title small{display:block;margin-top:2px;color:var(--ink-3);font-size:var(--fs-xs)}
.strat2-history-outcome{font-size:var(--fs-xs);color:var(--ink-3);text-align:right}
.strat2-history-foot{padding:12px 16px;border-top:1px solid var(--line);display:flex;
  justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;background:#fcfcfd}
.strat2-history-foot>span{color:var(--ink-3);font-size:var(--fs-xs)}
.strat2-open{flex:none}
/* Focused technical drawer: run artifacts stay accessible without fold panels
   and without expanding the primary dashboard into nested tables. */
.strat2-tech{display:grid;gap:16px}
.strat2-tech-group{border:1px solid var(--line);border-radius:var(--r-ctl);padding:13px;min-width:0}
.strat2-tech-group h3{font-size:var(--fs-md);margin:0 0 10px;font-weight:750}
.strat2-tech-group h4{font-size:var(--fs-sm);margin:15px 0 7px;color:var(--ink-2)}
.strat2-tech-group>.strat2-tech-group{padding:9px 0;border:0;border-top:1px solid var(--line);border-radius:0}
.strat2-tech-row{display:grid;grid-template-columns:minmax(0,.72fr) minmax(0,1.28fr);
  gap:12px;align-items:start;border-bottom:1px solid var(--line);padding:7px 0}
.strat2-tech-row:last-child{border-bottom:0}
.strat2-tech-row span{font-size:var(--fs-xs);color:var(--ink-3)}
.strat2-tech-row strong{font-size:var(--fs-xs);font-weight:620;text-align:right;
  overflow-wrap:anywhere;word-break:break-word;font-variant-numeric:tabular-nums}
.strat2-tech-checks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.strat2-tech-check{display:flex;justify-content:space-between;gap:9px;border:1px solid var(--line);
  border-radius:5px;padding:7px 8px;min-width:0}
.strat2-tech-check span{font-size:var(--fs-xs);overflow-wrap:anywhere}
.strat2-tech-check b{flex:none;font-size:var(--fs-sm)}
.strat2-linked-row{width:100%;display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding:9px 0;border:0;border-bottom:1px solid var(--line);background:transparent;
  color:var(--ink);font-size:var(--fs-sm);text-align:left}
.strat2-linked-row:hover{color:var(--accent-ink)}
.strat2-linked-row:last-child{border-bottom:0}
.strat2-linked-row span:first-child{min-width:0;overflow-wrap:anywhere}
.strat2-linked-row span:last-child{font-size:20px;color:var(--ink-3)}
.strat2-tech-artifact{border-bottom:1px solid var(--line);padding:10px 0;min-width:0}
.strat2-tech-artifact:last-child{border-bottom:0}
.strat2-tech-artifact b,.strat2-tech-artifact small,.strat2-tech-artifact code{display:block;overflow-wrap:anywhere}
.strat2-tech-artifact b{font-size:var(--fs-sm)}
.strat2-tech-artifact small{margin-top:3px;color:var(--ink-3);font-size:var(--fs-xs)}
.strat2-tech-artifact code{margin-top:6px;font-size:10px;color:var(--ink-2);word-break:break-all}
@media(max-width:1100px){
 .strat2-grid{grid-template-columns:1fr}
}
@media(max-width:760px){
 .strat2-board{gap:10px}
 .strat2-hero-main{grid-template-columns:1fr;padding:14px;gap:13px}
 .strat2-hero h2{font-size:20px}
 .strat2-hero-stats>div{padding:11px 9px}
 .strat2-hero-stats b{font-size:16px}
 .strat2-hero-stats small{font-size:10px}
 .strat2-card-head{padding:12px;align-items:flex-start}
 .strat2-card-body{padding:13px}
 .strat2-history{padding:0 12px}
 .strat2-history-foot{padding:12px}
 .strat2-history-row{grid-template-columns:10px minmax(0,1fr) auto;gap:7px}
 .strat2-history-outcome{max-width:95px;white-space:normal}
 .strat2-year-chart{gap:4px}
 .strat2-year-value{font-size:10px}
 .strat2-year b{font-size:11px}
 .strat2-gauge svg{height:45px;width:45px}
}
@media(max-width:390px){
 /* Keep technical checks readable on narrow investor/admin phones. */
 .strat2-tech-checks{grid-template-columns:minmax(0,1fr)}
 .strat2-tech-check{align-items:flex-start}
 .strat2-card-head{flex-wrap:wrap}
 .strat2-gauges{gap:6px}
 .strat2-gauge{gap:4px}
 .strat2-gauge strong{font-size:14px}
 .strat2-node>span{width:35px;height:35px}
 .strat2-pipeline>i{margin-top:18px}
}

/* CFD MT5 undeclared withdrawals: long deal identifiers must not overflow
   the admin drawer, especially on narrow phones. */
.cfd-mt5-picker{min-width:0;max-width:100%}
.cfd-mt5-picker legend{max-width:100%;white-space:normal;font-weight:600;margin-bottom:8px}
.cfd-mt5-picker .btn-row{min-width:0;max-width:100%;align-items:stretch}
.cfd-mt5-picker .btn-row>.btn{max-width:100%;min-width:0;white-space:normal;overflow-wrap:anywhere;text-align:left}
@media(max-width:600px){
  .cfd-mt5-picker .btn-row{display:grid;grid-template-columns:minmax(0,1fr)}
  .cfd-mt5-picker .btn-row>.btn{width:100%;justify-content:flex-start}
}

/* Shared sortable headings: Challenges, Investors and future admin tables. */
.tbl .table-sort-btn{display:inline-flex;align-items:center;gap:3px;border:0;padding:2px 0;background:transparent;color:inherit;font:inherit;font-weight:inherit;letter-spacing:inherit;text-transform:inherit;white-space:nowrap;cursor:pointer}
.tbl .table-sort-btn:hover{color:var(--accent)}
.tbl .table-sort-btn[aria-pressed="true"]{color:var(--accent-ink)}
.tbl .table-sort-btn:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
