/* AZP Financial Dashboard — monochrome editorial. Self-hosted fonts (drop files in
   /static/fonts/; system fallbacks render until then). No external font CDN calls. */

@font-face { font-family:'Inter'; src:url('/static/fonts/Inter-Regular.woff2') format('woff2');
             font-weight:400; font-style:normal; font-display:swap; }
@font-face { font-family:'Inter'; src:url('/static/fonts/Inter-Medium.woff2') format('woff2');
             font-weight:500; font-style:normal; font-display:swap; }
@font-face { font-family:'Inter'; src:url('/static/fonts/Inter-SemiBold.woff2') format('woff2');
             font-weight:600; font-style:normal; font-display:swap; }
@font-face { font-family:'Source Serif 4'; src:url('/static/fonts/SourceSerif4-SemiBold.woff2') format('woff2');
             font-weight:600; font-style:normal; font-display:swap; }

:root{
  --bg:#FFFFFF; --panel:#F5F5F5; --ink:#000000; --muted:#6B6B6B; --line:#E5E5E5;
  --viz-bar:#5B7C99;          /* restrained desaturated blue — revenue */
  --viz-cost:#B08968;         /* muted ochre — staff cost */
  --viz-obj:#A4503F;          /* muted red — objective line */
  --pos:#3F7D5E; --neg:#A4503F;
  /* The middle verdict: covering cost but short of target. Same ink as the Watch health chip
     (.chip.w, components.css) so the app keeps ONE status palette rather than growing a second
     amber. That chip still carries the hex literally; it can adopt this token whenever it is
     next touched. */
  --watch:#8A6D3B;
  --rule-mid:#C9C9C9;         /* between --line and --muted: secondary bar segments */
  --wrap:1260px;
}

*{ box-sizing:border-box; }
html{ -webkit-text-size-adjust:100%; }
body{
  margin:0; background:var(--bg); color:var(--ink);
  font-family:'Inter',-apple-system,'Segoe UI',Roboto,system-ui,sans-serif;
  font-feature-settings:"tnum" 1; line-height:1.5; font-size:15px;
}
.wrap{ max-width:var(--wrap); margin:0 auto; padding:0 28px; }

/* masthead */
.masthead{ border-bottom:1px solid var(--line); }
.masthead .wrap{ display:flex; align-items:baseline; justify-content:space-between;
  padding-top:22px; padding-bottom:18px; }
.brand{ font-family:'Source Serif 4','Libre Baskerville',Georgia,serif; font-size:18px; letter-spacing:.01em; }
.nav a{ color:var(--muted); font-size:13px; text-transform:uppercase; letter-spacing:.08em; margin-left:20px; }
.nav a.active{ color:var(--ink); }

/* page head */
.page-head{ padding:56px 0 34px; }
.display{ font-family:'Source Serif 4','Libre Baskerville',Georgia,serif; font-weight:600;
  font-size:38px; margin:0 0 10px; letter-spacing:-.015em; }
.sub{ color:var(--muted); max-width:62ch; margin:0; font-size:14px; }

/* KPIs — large figure, quiet label, hairline dividers, no cards */
.kpis{ display:grid; grid-template-columns:repeat(3,1fr); gap:1px;
  background:var(--line); border-top:1px solid var(--line); border-bottom:1px solid var(--line); }
.kpi{ background:var(--bg); padding:24px 24px 26px; }
.kpi:nth-child(3n+1){ padding-left:0; }
.kpi-label{ color:var(--muted); font-size:12px; text-transform:uppercase; letter-spacing:.09em; margin-bottom:10px; }
.kpi-figure{ font-size:30px; font-weight:600; letter-spacing:-.01em; font-variant-numeric:tabular-nums; }
.kpi-figure.pos{ color:var(--pos); }
.kpi-figure.neg{ color:var(--neg); }
.kpi-figure.watch{ color:var(--watch); }

/* overview KPI hierarchy — a serif money lead over a quieter secondary row */
.kpi-lead{ display:grid; grid-template-columns:1.5fr 1fr 1fr; gap:1px; background:var(--line);
  border-top:1px solid var(--line); border-bottom:1px solid var(--line); }
.kpi-lead .kpi{ background:var(--bg); padding:30px 26px 32px; }
.kpi-lead .kpi:first-child{ padding-left:0; }
.kpi-hero{ font-family:'Source Serif 4','Libre Baskerville',Georgia,serif; font-size:46px; font-weight:600;
  letter-spacing:-.02em; line-height:1; font-variant-numeric:tabular-nums; }
.kpi-figure.serif{ font-family:'Source Serif 4','Libre Baskerville',Georgia,serif; font-size:31px; letter-spacing:-.015em; }
.kpis-sub{ display:grid; grid-template-columns:repeat(3,1fr); gap:1px; background:var(--line); border-bottom:1px solid var(--line); }
.kpis-sub .kpi{ background:var(--bg); padding:18px 26px 20px; }
.kpis-sub .kpi:first-child{ padding-left:0; }
.kpis-sub .kpi-figure{ font-size:21px; }
/* The grid paints var(--line) behind a 1px gap, so any grid cell the cards do not fill shows as
   a solid grey panel rather than as whitespace. Match the columns to the card count. cols-3 is
   the declaration above; anything past 5 falls through to it and wraps into full rows. */
.kpis-sub.cols-1{ grid-template-columns:1fr; }
.kpis-sub.cols-2{ grid-template-columns:repeat(2,1fr); }
.kpis-sub.cols-4{ grid-template-columns:repeat(4,1fr); }
.kpis-sub.cols-5{ grid-template-columns:repeat(5,1fr); }
/* .info-tip (components.css) carries its own cursor:help. The Spaces duo still uses plain title
   attributes on its two halves, so those keep the affordance here. */
.kpi [title]{ cursor:help; }
/* The tip panel is 340px and opens from the glyph's left edge, which runs off-screen on a card
   in the last column. Flip it to open leftward there — the component's own default is unchanged
   everywhere else it is used. */
.kpis-sub .kpi:nth-child(3n) .info-tip::after,
.kpis-sub.cols-4 .kpi:nth-child(4n) .info-tip::after{ left:auto; right:0; }
/* A rate's unit, quiet and small beside the figure — same treatment the rate page gives it. */
.kpis-sub .kpi-figure .per{ font-size:13px; font-weight:400; color:var(--muted); margin-left:2px; }
.kpi-duo{ display:flex; gap:30px; }
.duo-n{ font-size:21px; font-weight:600; letter-spacing:-.01em; font-variant-numeric:tabular-nums; }
.duo-l{ display:block; margin-top:3px; font-size:10.5px; letter-spacing:.09em;
  text-transform:uppercase; color:var(--muted); }
@media (max-width:760px){
  .kpi-lead{ grid-template-columns:1fr 1fr; }
  .kpi-lead .kpi:first-child{ grid-column:span 2; padding-left:18px; }
}

/* section titles */
.section-title{ font-size:13px; text-transform:uppercase; letter-spacing:.09em;
  color:var(--muted); font-weight:600; margin:54px 0 16px; }
.chart{ width:100%; min-height:240px; }

/* overview charts + PM groups */
.chartrow{ display:grid; grid-template-columns:2fr 1fr; gap:36px; align-items:start; margin-top:8px; }
@media (max-width:760px){ .chartrow{ grid-template-columns:1fr; } }
.chart-legend{ display:flex; gap:18px; flex-wrap:wrap; margin-top:10px; font-size:12px; color:var(--muted); }
.chart-legend span{ display:inline-flex; align-items:center; gap:6px; }
.chart-legend i{ width:14px; height:0; border-top:2px solid var(--ink); display:inline-block; }
.pm-group{ margin-top:26px; }
.pm-name{ font-family:'Source Serif 4','Libre Baskerville',Georgia,serif; font-size:17px; margin:0 0 8px; }
.pm-name .muted{ font-family:'Inter',sans-serif; font-size:12px; }
.flag{ display:inline-block; width:9px; height:9px; border-radius:50%; vertical-align:middle; }
.pm-name .flag{ margin-right:9px; vertical-align:baseline; }
.flag.over{ background:var(--neg); }
.flag.watch{ background:#B89040; }   /* space health: Watch (amber) */
.flag.ok{ background:var(--pos); }
.flag.none{ background:var(--line); }

/* admin dropdown in the nav */
.nav .menu{ position:relative; display:inline-block; margin-left:20px; }
.nav .menu > summary{ list-style:none; cursor:pointer; color:var(--muted);
  font-size:13px; text-transform:uppercase; letter-spacing:.08em; }
.nav .menu > summary::-webkit-details-marker{ display:none; }
.nav .menu[open] > summary{ color:var(--ink); }
.nav .menu .menu-list{ position:absolute; right:0; top:26px; z-index:20; min-width:170px;
  background:var(--bg); border:1px solid var(--line); padding:8px 0; }
.nav .menu .menu-list a{ display:block; margin:0; padding:8px 16px; letter-spacing:.06em; }
.nav .menu .menu-list a:hover{ color:var(--ink); background:var(--panel); }
.subnav{ display:flex; gap:20px; border-bottom:1px solid var(--line); margin:0 0 8px; }
.subnav a{ color:var(--muted); font-size:13px; text-transform:uppercase; letter-spacing:.08em;
  padding-bottom:10px; margin-bottom:-1px; }
.subnav a.active{ color:var(--ink); border-bottom:2px solid var(--ink); }

/* Financials: 4-up KPIs, ageing strip, PM initials, selection caption */
.kpis-4{ grid-template-columns:repeat(4,1fr); }
.kpis-4 .kpi:nth-child(3n+1){ padding-left:24px; }
.kpis-4 .kpi:first-child{ padding-left:0; }
.kpis-5{ grid-template-columns:repeat(5,1fr); }
.kpis-5 .kpi{ padding:24px 16px 26px; }
.kpis-5 .kpi:nth-child(3n+1){ padding-left:16px; }
.kpis-5 .kpi:first-child{ padding-left:0; }
@media (max-width:980px){ .kpis-5{ grid-template-columns:repeat(3,1fr); } }
@media (max-width:760px){ .kpis-4, .kpis-5{ grid-template-columns:repeat(2,1fr); } }
.ageing{ display:grid; grid-template-columns:repeat(4,1fr); gap:1px; background:var(--line);
  border-top:1px solid var(--line); border-bottom:1px solid var(--line); }
.ageing .age{ background:var(--bg); padding:16px 20px 18px; display:flex; flex-direction:column; gap:6px; }
.ageing .age:first-child{ padding-left:0; }
@media (max-width:620px){ .ageing{ grid-template-columns:repeat(2,1fr); } }
.ctx-val.neg{ color:var(--neg); }
.ageing-link{ display:block; color:inherit; }
.ageing-link:hover .ageing{ background:var(--ink); }
.ageing-link:hover .ctx-label{ color:var(--ink); }
@media (max-width:900px){ .ageing{ grid-template-columns:repeat(2,1fr); } }
.pminit{ display:inline-block; min-width:26px; text-align:center; padding:2px 6px;
  border:1px solid var(--line); border-radius:4px; font-size:11.5px; letter-spacing:.04em; color:var(--muted); }
.kpi-link{ color:inherit; border-bottom:1px solid var(--line); }
.kpi-link:hover{ border-bottom-color:var(--ink); }
.data th[data-sort]{ cursor:pointer; user-select:none; }
.fxnote{ display:block; font-size:11px; color:var(--muted); }
.selection{ font-size:13px; color:var(--muted); margin:0 0 14px; }
.selection strong{ color:var(--ink); font-weight:600; }

/* status toggle (Financials) */
.statusbar{ display:flex; flex-wrap:wrap; gap:8px; margin:0 0 16px; }
.statusbar a{ border:1px solid var(--line); border-radius:999px; padding:5px 14px;
  font-size:12.5px; color:var(--muted); white-space:nowrap; }
.statusbar a:hover{ border-color:var(--ink); color:var(--ink); }
.statusbar a.active{ background:var(--ink); border-color:var(--ink); color:var(--bg); }

/* mobile nav toggle + PM workload cards */
.nav-toggle{ display:none; background:none; border:none; color:var(--ink); font-size:22px; line-height:1; cursor:pointer; padding:0; }
.viewas-banner{ background:var(--ink); color:var(--bg); text-align:center; font-size:12.5px;
  letter-spacing:.02em; padding:7px 16px; }
.viewas-banner a{ color:var(--bg); text-decoration:underline; }
.menu-sep{ display:block; margin:8px 0 2px; padding:0 16px; font-size:10px; letter-spacing:.09em;
  text-transform:uppercase; color:var(--muted); border-top:1px solid var(--line); padding-top:8px; }
.pm-cards{ display:none; list-style:none; margin:0; padding:0; }
.pm-cards li{ padding:11px 0; border-bottom:0.5px solid var(--line); }
.pmc-top{ display:flex; align-items:center; gap:9px; font-size:15px; }
.pmc-meta{ display:flex; gap:14px; margin-top:4px; padding-left:18px;
  color:var(--muted); font-size:12.5px; font-variant-numeric:tabular-nums; }
.pmc-meta .pos{ color:var(--pos); }
.pmc-meta .neg{ color:var(--neg); }

@media (max-width:720px){
  .masthead .wrap{ flex-wrap:wrap; }
  .nav-toggle{ display:inline-block; }
  .nav{ display:none; width:100%; flex-direction:column; align-items:flex-start; gap:2px; margin-top:14px; }
  .nav.open{ display:flex; }
  .nav a{ margin-left:0; padding:9px 0; }
  .nav .menu{ margin-left:0; }
  .nav .menu > summary{ padding:9px 0; }
  .nav .menu .menu-list{ position:static; border:none; padding:2px 0 2px 14px; min-width:0; }
  .nav .who{ padding-top:10px; }
  .pm-desk{ display:none; }
  .pm-cards{ display:block; }
}
@media (max-width:700px){
  /* Four cards abreast are unreadable on a phone; 2x2 keeps every cell filled, which three
     columns would not. The third card starts a row, so it takes the flush-left treatment too. */
  .kpis-sub.cols-4{ grid-template-columns:repeat(2,1fr); }
  .kpis-sub.cols-4 .kpi:nth-child(3){ padding-left:0; }
}
@media (max-width:520px){
  .display{ font-size:30px; }
  .kpi-hero{ font-size:33px; }
  .kpi-figure.serif{ font-size:22px; }
  .kpi-lead .kpi{ padding:22px 16px 24px; }
  .kpis-sub .kpi{ padding:14px 12px 16px; }
  .kpis-sub .kpi-figure{ font-size:17px; }
}

/* table */
.table-scroll{ width:100%; overflow-x:auto; }
.data{ width:100%; border-collapse:collapse; font-size:14px; }
.data{ table-layout:auto; font-size:13.5px; }
.data th, .data td{ padding:8px 9px; border-bottom:1px solid var(--line); white-space:nowrap; }
.data th:first-child, .data td:first-child{ padding-left:0; }
.data th:last-child, .data td:last-child{ padding-right:0; }
.data th{ color:var(--muted); font-weight:500; font-size:12px; text-transform:uppercase;
  letter-spacing:.06em; user-select:none; cursor:pointer; }
.data th.r, .data td.r{ text-align:right; font-variant-numeric:tabular-nums; }
.data th.l, .data td.l{ text-align:left; }
.data td.muted{ color:var(--muted); }
.data td.mono{ font-variant-numeric:tabular-nums; color:var(--muted); }
.data td.pos{ color:var(--pos); }
.data td.neg{ color:var(--neg); }
.data tbody tr:hover{ background:var(--panel); }
.data th.sorted-asc::after{ content:" ↑"; color:var(--ink); }
.data th.sorted-desc::after{ content:" ↓"; color:var(--ink); }
.data td:nth-child(2){ white-space:normal; min-width:130px; }
.data td.notes-cell{ white-space:normal; min-width:110px; max-width:220px; }

/* frozen header: sticks to the top of the viewport while the page scrolls.
   Only narrow screens get a horizontal scroll container (which would break sticky). */
.data thead th{ position:sticky; top:0; z-index:2; background:var(--bg);
  box-shadow:inset 0 -1px 0 var(--line); }
.table-scroll{ overflow-x:visible; }
@media (max-width:900px){ .table-scroll{ overflow-x:auto; } }

/* footer */
.foot{ color:var(--muted); font-size:12px; padding:40px 0; border-top:1px solid var(--line); margin-top:60px; }

/* responsive */
@media (max-width:760px){
  .wrap{ padding:0 18px; }
  .kpis{ grid-template-columns:repeat(2,1fr); }
  .kpi{ padding:18px; }
  .kpi:nth-child(3n+1){ padding-left:18px; }
  .kpi:nth-child(2n+1){ padding-left:0; }
  .display{ font-size:27px; }
  .masthead .wrap{ flex-direction:column; gap:8px; }
}

/* --- auth: masthead user + sign-in gate --- */
.nav .who{ color:var(--muted); margin-left:20px; }
.nav .signout{ margin-left:16px; color:var(--muted); }
.nav .signout:hover{ color:var(--ink); }

/* Language toggle. A button that has to sit in a row of links without looking like a control —
   the design system is hairlines and quiet type, and a default button chrome would be the
   loudest thing in the masthead. Monochrome, no accent, same muted->ink hover as .signout. */
.nav .langswitch{ display:inline; margin-left:16px; }
.nav .langbtn{ background:none; border:0; padding:0; font:inherit; cursor:pointer;
               color:var(--muted); letter-spacing:inherit; }
.nav .langbtn:hover{ color:var(--ink); }

.gate{ max-width:420px; margin:14vh auto 0; text-align:center; }
.gate-title{ font-family:'Source Serif 4',Georgia,serif; font-weight:600;
             font-size:34px; letter-spacing:-0.01em; margin:0 0 12px; }
.gate-lede{ color:var(--muted); line-height:1.6; margin:0 0 28px; }
.gate-btn{ display:inline-block; border:1px solid var(--ink); color:var(--ink);
           padding:11px 22px; text-decoration:none; font-weight:500; }
.gate-btn:hover{ background:var(--ink); color:var(--bg); }
.gate-err{ color:var(--neg); margin-top:20px; font-size:14px; }

/* --- project detail --- */
.backlink{ display:inline-block; color:var(--muted); text-decoration:none;
           font-size:13px; margin-bottom:14px; }
.backlink:hover{ color:var(--ink); }
.proj-meta .mono{ color:var(--ink); }
a.rowlink{ color:var(--ink); text-decoration:none; border-bottom:1px solid var(--line); }
a.rowlink:hover{ border-color:var(--ink); }
/* revenue split inside the space-page KPI hero — invoiced vs FX gain */
.revsplit{ margin-top:14px; }
.revbar{ display:flex; height:3px; }
.revbar span{ display:block; }
.revbar .inv{ background:var(--ink); }
.revbar .fx{ background:var(--rule-mid); }
.revparts{ display:flex; flex-wrap:wrap; gap:9px 26px; margin-top:9px; }
.rp-n{ font-size:16px; font-weight:600; font-variant-numeric:tabular-nums; }
.rp-l{ display:block; margin-top:2px; font-size:10.5px; letter-spacing:.07em;
       text-transform:uppercase; color:var(--muted); }

.proj-context{ display:flex; flex-wrap:wrap; gap:0 56px; row-gap:14px;
               padding:18px 0 6px; border-bottom:1px solid var(--line); margin-bottom:34px; }
.proj-context .ctx{ display:flex; flex-direction:column; gap:4px; }
.ctx-label{ color:var(--muted); font-size:12px; text-transform:uppercase; letter-spacing:0.04em; }
.ctx-val{ font-size:17px; font-variant-numeric:tabular-nums; }
.ctx-sub{ color:var(--muted); font-size:13px; }

/* --- period selector --- */
.periodbar{ display:flex; align-items:center; gap:12px; flex-wrap:wrap;
            padding:14px 0; border-bottom:1px solid var(--line); margin-bottom:22px; }
.pb-label{ color:var(--muted); font-size:12px; text-transform:uppercase; letter-spacing:0.04em; }
.pb-select{ font:inherit; font-size:14px; color:var(--ink); background:var(--bg);
            border:1px solid var(--line); padding:6px 10px; border-radius:0; }
.pb-select:focus{ outline:none; border-color:var(--ink); }
.pb-btn{ font:inherit; font-size:14px; border:1px solid var(--ink); background:var(--bg);
         padding:6px 14px; cursor:pointer; }
.periodrow{ display:flex; align-items:center; justify-content:space-between;
  gap:20px; flex-wrap:wrap; margin:0 0 30px; }
.period-active{ color:var(--muted); font-size:13px; margin:0;
  display:flex; align-items:center; gap:16px; }
.pb-step{ color:var(--muted); font-size:13px; letter-spacing:.04em; white-space:nowrap; }
.pb-step:hover{ color:var(--ink); }
.pb-dash{ color:var(--muted); }
.pb-view{ margin-left:6px; }

/* --- admin view editor --- */
/* wide enough for the two-column section picker; the single-column controls stay narrow */
.vieweditor{ max-width:760px; }
.vieweditor .field, .vieweditor .checkline, .vieweditor .kpilist{ max-width:520px; }
.field{ margin:8px 0 14px; }
.field-label{ display:block; color:var(--muted); font-size:12px; text-transform:uppercase;
              letter-spacing:.06em; margin-bottom:6px; }
.vieweditor .pb-select{ width:100%; }
.checkline{ display:flex; align-items:center; gap:8px; font-size:14px; color:var(--muted); margin-bottom:22px; }
.kpilist{ list-style:none; margin:0 0 26px; padding:0; border-top:1px solid var(--line); }
.kpilist li{ display:flex; align-items:center; justify-content:space-between;
             padding:11px 2px; border-bottom:1px solid var(--line); }
.kpilist label{ display:flex; align-items:center; gap:10px; font-size:14px; cursor:pointer; }
.ord button{ font:inherit; font-size:15px; line-height:1; color:var(--muted); background:none;
             border:1px solid var(--line); padding:3px 8px; margin-left:6px; cursor:pointer; }
.ord button:hover{ color:var(--ink); border-color:var(--ink); }

/* section picker: one column per page, hairline-separated like the KPI lists */
.seccols{ display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:26px 40px; margin-top:4px; }
.secgroup .pm-name{ margin:0 0 2px; }
.seclist{ list-style:none; margin:0; padding:0; border-top:1px solid var(--line); }
.seclist li{ padding:9px 2px; border-bottom:1px solid var(--line); }
.seclist label{ display:flex; align-items:center; gap:10px; font-size:14px; cursor:pointer; }
.seclist input[disabled]{ cursor:default; }

/* rows the selected role isn't permitted: visible but clearly out of reach */
.kpilist li.inert, .seclist li.inert{ opacity:.45; }
/* A key the page cannot answer at all. Same weight as .inert but its OWN class: the role script
   toggles .inert off when a role is allowed, and would have cleared this with it. */
.kpilist li.unfed{ opacity:.45; }
.kpilist li.unfed label{ cursor:default; }
.kpilist li.inert label, .seclist li.inert label{ cursor:default; }
.reqnote{ color:var(--muted); font-size:12px; }
@media (max-width:720px){ .seccols{ grid-template-columns:1fr; } }
.linkbtn{ font:inherit; font-size:13px; background:none; border:none; color:var(--muted);
          cursor:pointer; padding:0; }
.linkbtn:hover{ color:var(--ink); }
.linkbtn.danger:hover{ color:var(--neg); }
.deleteform{ margin-top:18px; }

/* --- revenue targets --- */
.targetline{ font-size:14px; }
.targetinput{ color:var(--muted); display:flex; align-items:center; gap:6px; }
.targetinput input{ width:160px; text-align:right; }

/* --- project edit form --- */
.projedit .field{ max-width:420px; }
.edit-note{ color:var(--muted); font-size:12px; margin-top:16px; }
.edit-note.neg{ color:var(--neg); }
.editlink{ margin-left:16px; }
/* form-level rejection (e.g. applying more retainer than a space holds) */
.form-err{ color:var(--neg); font-size:13px; border-left:2px solid var(--neg);
           padding:2px 0 2px 12px; margin:0 0 24px; max-width:420px; }

/* --- teammate profile: header (name left · salary/vacation right); facts strip below education --- */
.person-headtop{ display:flex; justify-content:space-between; align-items:flex-start; gap:40px; flex-wrap:wrap; }
.person-headtop .person-id{ flex:1 1 340px; min-width:0; }
.person-center{ flex:0 0 auto; display:flex; flex-direction:row; flex-wrap:wrap; justify-content:flex-end;
  gap:14px 40px; text-align:right; padding-top:8px; }
.person-center .pf{ display:flex; flex-direction:column; gap:3px; align-items:flex-end; }
.person-center .pf-val{ font-size:19px; }
.pf-label{ color:var(--muted); font-size:11px; text-transform:uppercase; letter-spacing:.07em; }
.pf-val{ font-size:15px; font-variant-numeric:tabular-nums; }
.edu-head{ color:var(--muted); font-size:12px; text-transform:uppercase; letter-spacing:.09em;
  font-weight:600; margin:22px 0 8px; }
.edu-list{ list-style:none; margin:0; padding:0; border-top:1px solid var(--line); max-width:52ch; }
.edu-list li{ padding:8px 0; font-size:14px; border-bottom:1px solid var(--line); }
.person-facts-strip{ margin-top:22px; margin-bottom:8px; }
.editlink-name{ font-family:'Inter',sans-serif; font-weight:400; font-size:13px; color:var(--muted);
  text-transform:none; letter-spacing:0; margin-left:14px; vertical-align:middle; }
.editlink-name:hover{ color:var(--ink); }
/* CV link — outlined pill with a document glyph, sits beside the name (admin only) */
.cv-pill{ display:inline-flex; align-items:center; gap:6px; vertical-align:middle; margin-left:16px;
  font-family:'Inter',sans-serif; font-size:12px; letter-spacing:.02em; color:var(--ink);
  text-decoration:none; border:1px solid var(--ink); border-radius:20px; padding:4px 13px;
  line-height:1; transition:background .12s,color .12s; }
.cv-pill:hover{ background:var(--ink); color:var(--bg); }
.cv-pill svg{ width:12px; height:12px; }
@media (max-width:720px){
  .person-center{ justify-content:flex-start; text-align:left; padding-top:6px; }
  .person-center .pf{ align-items:flex-start; }
}

/* --- needs-info review --- */
.badge-link{ display:inline-flex; align-items:center; gap:6px; }
.badge{ display:inline-block; min-width:18px; text-align:center; background:var(--ink); color:var(--bg);
        font-size:11px; line-height:1; padding:3px 6px; border-radius:9px; letter-spacing:0; }
.review-note{ color:var(--neg); font-size:13px; margin-top:12px; }
