/* Shared production activation foundation: auth, analyst, workspace, and operations. */
:root{
  --osi-surface-1:rgba(9,15,27,.94);
  --osi-surface-2:rgba(13,21,38,.92);
  --osi-surface-3:rgba(18,28,48,.88);
  --osi-border:rgba(134,151,196,.20);
  --osi-border-strong:rgba(134,151,196,.34);
  --osi-radius-sm:8px;
  --osi-radius-md:12px;
  --osi-radius-lg:18px;
  --osi-shadow:0 24px 70px rgba(0,0,0,.34);
  --osi-focus:0 0 0 3px rgba(255,176,32,.24);
}

:where(button,a,input,textarea,select):focus-visible{
  outline:2px solid var(--cyan);
  outline-offset:2px;
  box-shadow:var(--osi-focus);
}
:where(button,input,textarea,select):disabled{cursor:not-allowed;opacity:.52}
:where(input,textarea,select){accent-color:var(--sol)}
.osi-primary-action,.osi-secondary-action{
  min-height:40px;border-radius:var(--osi-radius-sm);padding:9px 15px;
  font:700 12.5px/1.2 var(--font-sans);cursor:pointer;transition:background .16s,border-color .16s,transform .16s;
}
.osi-primary-action{border:1px solid rgba(20,241,149,.55);background:var(--sol);color:#06120d}
.osi-primary-action:hover{background:#39f6aa;transform:translateY(-1px)}
.osi-secondary-action{border:1px solid var(--osi-border-strong);background:transparent;color:var(--ink)}
.osi-secondary-action:hover{border-color:var(--cyan);background:rgba(255,176,32,.07)}

/* Maintainer access communicates both independent gates at every size. */
.adm-gates{display:grid;gap:9px;margin:18px 0}
.adm-gate{display:grid;grid-template-columns:32px 1fr;gap:11px;align-items:center;padding:12px;border:1px solid var(--osi-border);border-radius:var(--osi-radius-md);background:var(--osi-surface-1)}
.adm-gate>span{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;border:1px solid var(--osi-border-strong);font:700 12.5px var(--font-sans);color:var(--ink-faint)}
.adm-gate div{display:flex;flex-direction:column;gap:2px}
.adm-gate b{font-size:13px;color:var(--ink)}
.adm-gate small{font-size:12.5px;color:var(--ink-dim)}
/* A passed gate is a working state, not chain proof: lamp, never verified green. */
.adm-gate.ok{border-color:rgba(255,176,32,.4);background:rgba(255,176,32,.05)}
.adm-gate.ok>span{border-color:rgba(255,176,32,.7);background:rgba(255,176,32,.14);color:var(--lamp,#ffb020)}
.adm-gate.partial{border-style:dashed;border-color:rgba(255,176,32,.35)}
.adm-gate.partial>span{border-style:dashed;border-color:rgba(255,176,32,.55);color:var(--lamp,#ffb020)}
/* Gate count in words, sentence case. 'Open' is a place you can go (lamp),
 * not chain proof, so it never uses verified green. */
.osi-menu-lock{margin-left:auto;font:600 12px var(--font-sans);color:var(--ink-faint);text-transform:none;letter-spacing:0}
.osi-menu-lock.ready{color:var(--lamp,#ffb020)}

/* Public analyst directory uses only the least-privilege public DTO. */
#analysts .lb-board{overflow:hidden}
#analysts .osi-analyst-head,#analysts .osi-analyst-row{display:grid;grid-template-columns:minmax(210px,1.25fr) minmax(145px,.75fr) minmax(180px,1fr) 110px 78px 70px;align-items:center;gap:14px}
#analysts .osi-analyst-head{padding:11px 15px;border-bottom:1px solid var(--osi-border);font-size:12px;color:var(--ink-faint);letter-spacing:.09em;text-transform:uppercase}
.osi-analyst-row{width:100%;min-height:72px;padding:13px 15px;border:0;border-bottom:1px solid var(--osi-border);background:transparent;color:var(--ink);text-align:left;cursor:pointer}
.osi-analyst-row:last-child{border-bottom:0}
.osi-analyst-row:hover{background:rgba(255,176,32,.045)}
.osi-analyst-person{display:flex;align-items:center;gap:11px;min-width:0}
.osi-analyst-person>span:last-child{display:flex;flex-direction:column;min-width:0}
.osi-analyst-person b{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.osi-analyst-person em{font:400 12px var(--font-sans);color:var(--ink-faint);font-style:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.osi-an-avatar{width:var(--osi-avatar-size,42px);height:var(--osi-avatar-size,42px);object-fit:cover;border-radius:11px;border:1px solid rgba(255,176,32,.28);background:var(--osi-surface-3);flex:none}
.osi-analyst-row .osi-an-avatar{--osi-avatar-size:38px}
.osi-an-avatar.fallback{display:grid;place-items:center;color:var(--cyan);font-weight:800}
.osi-status{display:inline-flex;width:max-content;max-width:100%;padding:5px 8px;border:1px solid var(--osi-border);border-radius:999px;background:rgba(134,151,196,.06);font:700 12px var(--font-sans);color:var(--ink-dim);text-transform:uppercase;letter-spacing:.05em}
.osi-status.probationary_analyst,.osi-status.approved{color:var(--sol);border-color:rgba(20,241,149,.36);background:rgba(20,241,149,.07)}
.osi-status.in_review,.osi-status.submitted{color:var(--cyan);border-color:rgba(255,176,32,.34);background:rgba(255,176,32,.07)}
.osi-status.revision_requested{color:var(--amber);border-color:rgba(255,176,32,.38);background:rgba(255,176,32,.07)}
.osi-status.rejected{color:var(--red);border-color:rgba(255,84,112,.36);background:rgba(255,84,112,.07)}
.osi-expertise-list,.osi-tag-list{display:flex;gap:5px;flex-wrap:wrap}
.osi-expertise-list span,.osi-tag-list span{padding:4px 7px;border:1px solid var(--osi-border);border-radius:999px;background:rgba(153,69,255,.06);font:500 12px var(--font-sans);color:#c9b7ff}
.osi-expertise-list em{font-size:12.5px;color:var(--ink-faint);font-style:normal}
.osi-weight{color:var(--sol);font-weight:700}
/* Weight and Proof are right-aligned in the header row, so their values follow
   the same edge. A numeric column that does not line up with its own label
   reads as a rendering fault. */
#analysts .osi-analyst-row>*:nth-child(5),
#analysts .osi-analyst-row>*:nth-child(6){text-align:right}
.osi-activation-loading,.osi-activation-empty{padding:26px 18px;color:var(--ink-dim);text-align:center}
.osi-activation-loading{font:500 12.5px var(--font-sans)}
.osi-activation-empty{display:flex;flex-direction:column;align-items:center;gap:6px;border:1px dashed var(--osi-border-strong);border-radius:var(--osi-radius-md)}
.osi-activation-empty b{font-size:14px;color:var(--ink)}
.osi-activation-empty span{max-width:560px;font-size:12px;line-height:1.6}

/* Public profile drawer remains inspectable without exposing restricted fields. */
.osi-public-profile{display:flex;flex-direction:column;gap:20px}
.osi-public-profile>header,.osi-workspace-profile>header{display:flex;align-items:flex-start;gap:16px;padding-bottom:18px;border-bottom:1px solid var(--osi-border)}
.osi-public-profile>header .osi-an-avatar,.osi-workspace-profile>header .osi-an-avatar{--osi-avatar-size:64px}
.osi-public-profile h3,.osi-workspace-profile h3{font-size:24px;line-height:1.1;margin:3px 0 7px}
.osi-public-profile header span,.osi-workspace-profile header span{font-size:12px;color:var(--cyan)}
.osi-public-profile p,.osi-workspace-profile p{font-size:12px;line-height:1.65;color:var(--ink-dim)}
.osi-public-profile section,.osi-workspace-profile section{display:flex;flex-direction:column;gap:9px}
.osi-public-profile h4,.osi-workspace-profile h4,.osi-version-card h4,.osi-application-card h3{font-size:13px;color:var(--ink);margin:0}
.osi-profile-support-actions{display:flex;flex-wrap:wrap;gap:9px}
.osi-profile-support-actions>button{flex:1 1 180px}
.osi-profile-facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));border:1px solid var(--osi-border);border-radius:var(--osi-radius-md);overflow:hidden}
.osi-profile-facts>div{display:flex;flex-direction:column;gap:6px;padding:13px;border-right:1px solid var(--osi-border)}
.osi-profile-facts>div:last-child{border-right:0}
.osi-profile-facts>div>span{font:500 12px var(--font-sans);color:var(--ink-faint);text-transform:uppercase}
.osi-profile-facts b{font:700 12px var(--font-sans);color:var(--sol)}
.osi-safe-links{display:flex;gap:8px;flex-wrap:wrap}
.osi-safe-links a,.osi-history-row a{color:var(--cyan);font:600 12px var(--font-sans);text-decoration:none;word-break:break-all}
.osi-safe-links a{padding:7px 9px;border:1px solid rgba(255,176,32,.25);border-radius:var(--osi-radius-sm)}
.osi-history-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:12px;align-items:center;padding:11px 0;border-bottom:1px solid var(--osi-border)}
.osi-history-row>div{display:flex;flex-direction:column;gap:3px}
.osi-history-row b{font-size:12.5px}
.osi-history-row span,.osi-history-row time{font:400 12px var(--font-sans);color:var(--ink-faint)}

/* Private wallet-authorized workspace. */
.osi-analyst-workspace{max-width:1120px;margin:0 auto;padding:28px 24px 60px}
.osi-workspace-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;padding:24px 0;border-bottom:1px solid var(--osi-border)}
.osi-workspace-head span{font-size:12px;color:var(--sol);letter-spacing:.12em}
.osi-workspace-head h2{font-size:clamp(26px,4vw,42px);line-height:1.05;margin:7px 0}
.osi-workspace-head p{max-width:650px;font-size:12px;color:var(--ink-dim)}
.osi-workspace-tabs{display:flex;gap:5px;overflow-x:auto;padding:14px 0;border-bottom:1px solid var(--osi-border)}
.osi-workspace-tabs button{white-space:nowrap;padding:9px 12px;border:1px solid transparent;border-radius:var(--osi-radius-sm);background:transparent;color:var(--ink-dim);font:600 12px var(--font-sans);cursor:pointer}
.osi-workspace-tabs button:hover,.osi-workspace-tabs button.active{color:var(--cyan);border-color:rgba(255,176,32,.28);background:rgba(255,176,32,.06)}
.osi-analyst-workspace>main{padding-top:20px}
.osi-workspace-recover{display:flex;flex-wrap:wrap;gap:9px;justify-content:center;margin-top:16px}
.osi-workspace-profile,.osi-application-card{display:flex;flex-direction:column;gap:18px;padding:20px;border:1px solid var(--osi-border);border-radius:var(--osi-radius-lg);background:var(--osi-surface-1);box-shadow:var(--osi-shadow)}
.osi-application-card+ .osi-application-card{margin-top:16px}
.osi-application-card>header,.osi-version-card>header{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}
.osi-application-card>header span,.osi-version-card>header span{font-size:12px;color:var(--ink-faint)}
.osi-version-card{padding:16px 0;border-top:1px solid var(--osi-border)}
.osi-version-card p{font-size:12.5px;line-height:1.65;color:var(--ink-dim);white-space:pre-wrap}
.osi-version-card p b{color:var(--ink)}
.osi-version-meta{display:flex;gap:14px;flex-wrap:wrap;margin-top:10px;font:400 12px var(--font-sans);color:var(--ink-faint)}
.osi-proof-badge{padding:5px 8px;border-radius:999px;font:600 12px var(--font-sans);white-space:nowrap}
.osi-proof-badge.signed{color:var(--cyan);border:1px solid rgba(255,176,32,.3);background:rgba(255,176,32,.06)}
.osi-review-list{display:flex;flex-direction:column;border-top:1px solid var(--osi-border);margin-top:12px}
.osi-review-history{display:grid;grid-template-columns:130px 1fr auto;gap:12px;padding:9px 0;border-bottom:1px solid var(--osi-border);font-size:12px}
.osi-review-history span,.osi-review-history time{font:400 12px var(--font-sans);color:var(--ink-faint)}
.osi-callout{display:flex;flex-direction:column;gap:3px;padding:12px 14px;border-radius:var(--osi-radius-sm);font-size:12.5px}
.osi-callout.warning{border:1px solid rgba(255,176,32,.35);background:rgba(255,176,32,.055);color:var(--amber)}
.osi-callout span{color:var(--ink-dim)}

/* Application form. */
#apx-modal .fo-form{width:min(760px,calc(100vw - 30px));max-height:min(90vh,900px);overflow:auto;border-radius:var(--osi-radius-lg);background:var(--osi-surface-1);box-shadow:var(--osi-shadow)}
.osi-analyst-form{display:flex;flex-direction:column;gap:14px;margin-top:12px}
.osi-analyst-form h3{font-size:23px;margin:0}
.osi-analyst-form .lead{font-size:12px;line-height:1.65;color:var(--ink-dim)}
.osi-analyst-form>label,.osi-form-grid label{display:flex;flex-direction:column;gap:7px}
.osi-analyst-form label>span,.osi-expertise legend{font:600 12px var(--font-sans);color:var(--ink-dim);text-transform:uppercase;letter-spacing:.07em}
/* The safety consent is a sentence the applicant has to read, not a field
   label. The uppercase mono field-label face was leaking onto it and made it
   render unlike the identical consent on the Report and Wire forms. */
.osi-analyst-form .osi-report-safety>span{font:400 12px/1.6 'Archivo',sans-serif;color:var(--ink);text-transform:none;letter-spacing:normal}
.osi-analyst-form input:not([type=checkbox]),.osi-analyst-form textarea,.osi-ops-decision select{width:100%;border:1px solid var(--osi-border-strong);border-radius:var(--osi-radius-sm);background:#070c16;color:var(--ink);padding:11px 12px;font:400 12px/1.5 'Archivo',sans-serif}
.osi-analyst-form textarea{min-height:92px;resize:vertical}
.osi-analyst-form input[type=file]{padding:10px;border:1px dashed var(--osi-border-strong);border-radius:var(--osi-radius-sm);background:rgba(255,255,255,.015);color:var(--ink-dim)}
.osi-analyst-form small{font-size:12px;color:var(--ink-faint)}
.osi-application-steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;padding:10px;border:1px solid rgba(49,245,181,.2);border-radius:var(--osi-radius-md);background:rgba(49,245,181,.035)}
.osi-application-steps span{display:flex;align-items:center;gap:7px;color:var(--ink-dim);font-size:12.5px;line-height:1.35}
.osi-application-steps b{display:grid;place-items:center;flex:0 0 24px;height:24px;border:1px solid rgba(49,245,181,.35);border-radius:50%;color:var(--cyan);font:700 12px var(--font-sans)}
.osi-application-optional{border:1px solid var(--osi-border);border-radius:var(--osi-radius-md);background:rgba(255,255,255,.012);overflow:hidden}
.osi-application-optional summary{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:48px;padding:10px 13px;cursor:pointer;list-style:none;color:var(--ink)}
.osi-application-optional summary::-webkit-details-marker{display:none}
.osi-application-optional summary span{display:flex;flex-direction:column;gap:2px}
.osi-application-optional summary b{font-size:12px}
.osi-application-optional summary small{font-size:12px;font-weight:400}
.osi-application-optional summary i{color:var(--cyan);font:500 22px/1 var(--font-sans);font-style:normal;transition:transform .16s ease}
.osi-application-optional[open] summary{border-bottom:1px solid var(--osi-border);background:rgba(49,245,181,.025)}
.osi-application-optional[open] summary i{transform:rotate(45deg)}
.osi-application-optional-body{display:flex;flex-direction:column;gap:14px;padding:14px}
.osi-application-optional-body>label{display:flex;flex-direction:column;gap:7px}
.osi-application-actions{display:flex;align-items:center;justify-content:space-between;gap:10px}
.osi-application-actions .rec-go{min-height:44px;margin-top:0}
.osi-application-actions .osi-secondary-action{min-height:44px}
.osi-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.osi-expertise{display:flex;gap:8px;flex-wrap:wrap;padding:13px;border:1px solid var(--osi-border);border-radius:var(--osi-radius-md)}
.osi-expertise legend{padding:0 6px}
.osi-expertise label{display:flex;align-items:center;gap:6px;padding:6px 8px;border:1px solid var(--osi-border);border-radius:999px;font-size:12px;color:var(--ink-dim);cursor:pointer}
.osi-form-warning{padding:11px 13px;border:1px solid rgba(255,176,32,.3);border-radius:var(--osi-radius-sm);background:rgba(255,176,32,.05);font-size:12px;line-height:1.55;color:#e4c784}
.osi-form-status{min-height:18px;margin-top:8px;font-size:12px;color:var(--ink-dim)}
.osi-form-status.success{color:var(--sol)}
.osi-form-status.error{color:var(--red)}

/* Exact-version maintainer application queue. */
.osi-ops-applications{margin-bottom:20px;padding:clamp(18px,3vw,28px);border:1px solid var(--line,#2a303a);border-radius:var(--osi-radius-lg);background:var(--bg-raised,#10131a)}
.moc-section-head{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:14px}
.moc-section-head span{font:500 12.5px/1.4 var(--font-sans);color:var(--ink-faint);letter-spacing:0;text-transform:none}
.moc-section-head h3{font-size:17px;margin-top:3px}
#osi-analyst-ops{display:flex;flex-direction:column;gap:12px}
.osi-ops-application{padding:17px;border:1px solid var(--osi-border);border-radius:var(--osi-radius-md);background:var(--osi-surface-1)}
.osi-ops-application>header{display:grid;grid-template-columns:46px 1fr auto;gap:12px;align-items:center;padding-bottom:14px;border-bottom:1px solid var(--osi-border)}
.osi-ops-application>header .osi-an-avatar{--osi-avatar-size:46px}
.osi-ops-application header span,.osi-ops-application header p{font:400 12px var(--font-sans);color:var(--ink-faint)}
.osi-ops-application h4{font-size:15px;margin:2px 0}
.osi-ops-grid{display:grid;grid-template-columns:1fr 1.2fr;gap:20px;padding:16px 0}
.osi-ops-grid section{min-width:0}
.osi-ops-grid h5{font:600 12.5px var(--font-sans);color:var(--ink-dim);text-transform:none;letter-spacing:0;margin-bottom:8px}
.osi-ops-grid p{font-size:12.5px;line-height:1.6;color:var(--ink-dim);white-space:pre-wrap;word-break:break-word}
.osi-ops-grid p+p{margin-top:8px}
.osi-ops-decision{display:flex;flex-direction:column;gap:10px;padding-top:14px;border-top:1px solid var(--osi-border)}
.osi-ops-decision label{display:flex;flex-direction:column;gap:6px;font:600 12.5px var(--font-sans);color:var(--ink-faint);text-transform:none}
.osi-ops-decision>div{display:flex;gap:7px;flex-wrap:wrap}
.osi-ops-decision button{min-height:40px;padding:9px 14px;border:1px solid var(--osi-border-strong);border-radius:var(--osi-radius-sm);background:transparent;color:var(--ink);font:700 12px var(--font-sans);cursor:pointer}
.osi-ops-decision button[data-analyst-decision=approve]{color:#170f02;background:var(--lamp,#ffb020);border-color:var(--lamp,#ffb020)}
.osi-ops-decision button[data-analyst-decision=approve]:hover{background:var(--lamp-strong,#ffc24d)}
.osi-ops-decision button[data-analyst-decision=reject]{color:var(--red);border-color:rgba(255,84,112,.4)}
.osi-ops-decision button:hover{background:rgba(255,255,255,.045)}
.osi-ops-decision p{font-size:12px;color:var(--ink-faint)}

@media(max-width:900px){
  #analysts .osi-analyst-head{display:none}
  #analysts .osi-analyst-row{grid-template-columns:minmax(0,1fr) auto 70px;gap:10px}
  #analysts .osi-analyst-row>span:nth-child(3),#analysts .osi-analyst-row>span:nth-child(4),#analysts .osi-analyst-row>span:nth-child(6){display:none}
  .osi-ops-grid{grid-template-columns:1fr}
  .osi-workspace-head{align-items:flex-start;flex-direction:column}
}
@media(max-width:600px){
  .osi-analyst-workspace{padding:18px 14px 44px}
  .osi-form-grid,.osi-profile-facts{grid-template-columns:1fr}
  .osi-profile-facts>div{border-right:0;border-bottom:1px solid var(--osi-border)}
  .osi-profile-facts>div:last-child{border-bottom:0}
  .osi-review-history,.osi-history-row{grid-template-columns:1fr;gap:4px}
  .osi-application-card,.osi-workspace-profile{padding:15px}
  .osi-application-steps{grid-template-columns:1fr}
  .osi-application-actions{align-items:stretch;flex-direction:column-reverse}
  .osi-application-actions button{width:100%}
  .osi-version-card>header{flex-direction:column}
  .moc-section-head{align-items:flex-start;flex-direction:column}
  .osi-ops-application{padding:13px}
  .osi-ops-application>header{grid-template-columns:38px 1fr}.osi-ops-application>header>.osi-status{grid-column:2}.osi-ops-application>header .osi-an-avatar{--osi-avatar-size:38px}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

/* Maintainer profile.
   Sits above the analyst roster and must never read as a roster entry. It gets
   its own kicker, its own frame and a standing notice, because the operator
   holds no analyst standing and the surface should say that rather than leave
   it to be inferred from a column that is simply absent. */
.osi-maintainer-profile{margin:0 0 18px;padding:0}
.osi-maintainer-kicker{margin:0 0 8px;font-family:var(--font-sans);font-size:12.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-faint)}
/* The operator card sits directly above the analyst roster, so it has to read
   as a peer of that table in weight while never reading as a row in it. It
   carries the accent rule and the roster does not; the roster carries status
   badges and weights and this never does. */
/* The maintainer renders as a peer of the roster, not as a separate block with
   its own layout language. It reuses the analyst row grid so the columns line
   up with the table directly below it, carries a violet MAINTAINER badge where
   an analyst carries a status badge, and states "None" in the weight column
   because no analyst weight exists to state. Clicking it opens the same profile
   modal an analyst row opens. */
.osi-maintainer-rows{border:1px solid var(--osi-border);border-radius:12px;overflow:hidden;background:rgba(153,69,255,.035)}
#analysts .osi-maintainer-rows .osi-analyst-row{border-bottom:0}
.osi-analyst-row-maintainer{position:relative}
.osi-analyst-row-maintainer::before{content:'';position:absolute;inset:0 auto 0 0;width:2px;background:linear-gradient(180deg,var(--sol,#14f195),rgba(153,69,255,.65))}
.osi-analyst-row-maintainer:hover{background:rgba(153,69,255,.07)}
/* Reads as a role, deliberately not as one of the green analyst status badges. */
.osi-status.maintainer{color:#c4a2ff;border-color:rgba(153,69,255,.38);background:rgba(153,69,255,.12)}
.osi-weight-none{color:var(--ink-faint)}
/* Shown only to the operator, when no profile has been published yet. */
.osi-maintainer-empty{margin:0 0 10px;font-size:13px;color:var(--ink-faint)}
.osi-maintainer-notice{margin:8px 0 0;font-size:12.5px;line-height:1.55;color:var(--ink-faint)}
/* Governance standing inside the shared profile modal. */
.osi-public-profile-maintainer .osi-profile-facts b{color:var(--ink-dim)}
.osi-profile-role-note{margin:10px 0 0;padding:10px 12px;border:1px solid var(--osi-border);border-left:2px solid rgba(153,69,255,.65);border-radius:8px;font-size:12.5px;line-height:1.6;color:var(--ink-dim)}
.osi-maintainer-current-avatar{display:flex;align-items:center;gap:10px}
.osi-maintainer-current-avatar img,.osi-maintainer-current-avatar svg,.osi-maintainer-current-avatar .osi-an-avatar{width:40px;height:40px;border-radius:9px;object-fit:cover;display:block}
.osi-maintainer-editor small{font-size:12.5px;line-height:1.5;color:var(--ink-faint)}
.osi-maintainer-editor input[type=file]{padding:8px 10px;font-size:12px;cursor:pointer}
.osi-maintainer-edit{margin-top:10px}
.osi-maintainer-editor-host{margin-top:12px}
.osi-maintainer-editor{display:flex;flex-direction:column;gap:10px;padding:14px 16px;border:1px solid var(--line-bright);border-radius:12px}
.osi-maintainer-editor label{display:flex;flex-direction:column;gap:5px}
.osi-maintainer-editor label span{font-family:var(--font-sans);font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-faint)}
.osi-maintainer-editor input,.osi-maintainer-editor textarea{width:100%;background:var(--bg);border:1px solid var(--line-bright);border-radius:8px;padding:9px 12px;color:var(--ink);font-size:13px;font-family:var(--font-sans);outline:none;resize:vertical}
.osi-maintainer-editor input:focus-visible,.osi-maintainer-editor textarea:focus-visible{border-color:var(--sol)}
.osi-maintainer-editor-actions{display:flex;gap:8px;flex-wrap:wrap}
.osi-maintainer-editor-status{margin:0;font-size:12px;color:var(--ink-dim);min-height:1em}

/* ---------------------------------------------------------------------------
   Verified work record: the CV surface of a public profile.

   Every row states a signed act on a record the reader can open, so the styling
   job is legibility and hierarchy, not persuasion. No progress bars, no scores,
   no badge that could read as a rating of whether an analysis was correct.
   Outcome is always carried by its own word as well as its colour, because
   colour alone is not a label.
   --------------------------------------------------------------------------- */
.osi-cv-share{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.osi-cv-permalink{flex:1 1 240px;min-width:0;padding:9px 11px;border:1px solid var(--osi-border);border-radius:var(--osi-radius-sm);color:var(--cyan);font:600 12.5px var(--font-sans);text-decoration:none;word-break:break-all}
.osi-cv-permalink:hover,.osi-cv-permalink:focus-visible{border-color:var(--cyan)}
.osi-cv-no-permalink{flex:1 1 240px;min-width:0;font-size:12.5px;line-height:1.5;color:var(--ink-faint)}
.osi-cv-record{gap:14px}
.osi-cv-note{margin:0;font-size:12.5px;line-height:1.6;color:var(--ink-faint)}
/* Labels wrap at narrow cell widths, so the cells are stretched to equal height
   and the numbers pushed to the bottom. Without that a two-line label drops its
   own number below the rest of the row and the summary stops reading as a row. */
.osi-cv-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));align-items:stretch;border:1px solid var(--osi-border);border-radius:var(--osi-radius-md);overflow:hidden}
.osi-cv-summary>div{display:flex;flex-direction:column;justify-content:space-between;gap:6px;padding:11px 13px;border-right:1px solid var(--osi-border);border-bottom:1px solid var(--osi-border)}
.osi-cv-summary>div>span{font:500 12px var(--font-sans);color:var(--ink-faint);text-transform:uppercase;letter-spacing:.05em}
.osi-cv-summary b{font:700 16px var(--font-sans);color:var(--ink)}
.osi-cv-entries{display:flex;flex-direction:column;gap:0;margin:0;padding:0;list-style:none}
.osi-cv-entry{display:flex;flex-direction:column;gap:7px;padding:14px 0;border-bottom:1px solid var(--osi-border)}
.osi-cv-entry:last-child{border-bottom:0}
.osi-cv-entry-head{display:flex;flex-wrap:wrap;align-items:center;gap:9px}
.osi-cv-ref{color:var(--cyan);font:700 12.5px 'JetBrains Mono',monospace;text-decoration:none}
a.osi-cv-ref:hover,a.osi-cv-ref:focus-visible{text-decoration:underline}
.osi-cv-outcome{padding:3px 8px;border:1px solid var(--osi-border);border-radius:999px;font:600 12px var(--font-sans);color:var(--ink-dim);text-transform:uppercase;letter-spacing:.05em}
/* A sealed record is the only state that reads as finished, so it is the only
   one that gets the Solana identity colour. Everything else stays neutral: an
   open investigation is not a lesser record, it is an unfinished one.
   Borders are mixed from the badge's own colour rather than hardcoded, because
   the accent tokens are re-pointed by the interface redesign and a literal
   value here would drift away from whatever the theme is actually using. */
.osi-cv-outcome[data-outcome=sealed]{color:var(--sol);border-color:color-mix(in srgb,var(--sol) 42%,transparent)}
.osi-cv-outcome[data-outcome=published],.osi-cv-outcome[data-outcome=resolved]{color:var(--cyan);border-color:color-mix(in srgb,var(--cyan) 36%,transparent)}
.osi-cv-title{font-size:13.5px;line-height:1.45;color:var(--ink)}
.osi-cv-role{font:500 12.5px var(--font-sans);color:var(--ink-faint)}
.osi-cv-acts{display:flex;flex-direction:column;gap:5px;margin:3px 0 0;padding:0;list-style:none}
.osi-cv-acts li{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px}
.osi-cv-act-name{font:600 12.5px var(--font-sans);color:var(--ink-dim)}
.osi-cv-acts time{font:400 12.5px var(--font-sans);color:var(--ink-faint)}
.osi-cv-act-proof{font:600 12.5px var(--font-sans);color:var(--cyan);text-decoration:none}
a.osi-cv-act-proof:hover,a.osi-cv-act-proof:focus-visible{text-decoration:underline}
/* A wallet signature is real proof and is not a transaction. It never borrows
   the colour the product reserves for a link that resolves on chain. */
.osi-cv-act-offchain{color:var(--ink-faint)}
.osi-cv-unlisted{margin:0;font-size:12.5px;line-height:1.6;color:var(--ink-faint)}

/* Print and save-as-PDF: the actual way a track record gets attached to a grant
   application or a job application. Everything except the open profile is
   hidden and the sheet is inverted to ink on paper. Links keep their href in
   printed text so a paper copy stays verifiable.

   Isolation is by visibility rather than by hiding the body's direct children:
   #ap-modal lives inside <main>, not at body level, so a display rule aimed at
   a body child matches nothing and prints a blank page. visibility inherits,
   so hiding everything and re-showing the modal subtree works at any depth. */
@media print{
  /* The modal card carries no padding once it is unwrapped, so the sheet's own
     margin is what keeps a right-aligned proof link off the paper edge. */
  @page{margin:14mm}
  html,body{background:#fff!important;color:#111!important;overflow:visible!important;height:auto!important}
  /* Two layers on purpose. Visibility isolates the profile at any DOM depth and
     is the rule that must not fail. The display rules below it collapse the
     page's own height so the sheet ends with the record instead of trailing
     blank pages; they name the one chain the modal actually sits in, and if
     that chain ever moves the visibility layer still prints the right thing. */
  body *{visibility:hidden!important;background:none!important;box-shadow:none!important}
  body>*{display:none!important}
  body>#main-content{display:block!important;padding:0!important;margin:0!important}
  #main-content>*{display:none!important}
  #main-content>#ap-modal.open{display:block!important}
  #ap-modal.open,#ap-modal.open *{visibility:visible!important}
  /* position:fixed content can print on the first page only, so the open card
     is lifted to the top of the document flow and allowed to run over pages. */
  #ap-modal.open{position:absolute!important;top:0!important;left:0!important;right:auto!important;bottom:auto!important;display:block!important;width:100%!important;padding:0!important;opacity:1!important;background:#fff!important;transition:none!important}
  #ap-modal.open .ap-modal-bg,#ap-modal.open .ap-modal-x,.osi-cv-hide-in-print,.osi-cv-share button{display:none!important;visibility:hidden!important}
  #ap-modal.open .ap-modal-card{position:static!important;width:auto!important;max-width:none!important;max-height:none!important;overflow:visible!important;border:0!important;box-shadow:none!important;background:#fff!important;padding:0!important;transform:none!important}
  #ap-modal.open .ap-modal-body{overflow:visible!important;max-height:none!important;padding:0!important}
  .osi-public-profile,.osi-public-profile *{color:#111!important;background:none!important;box-shadow:none!important}
  .osi-public-profile h3,.osi-cv-summary b,.osi-cv-title,.osi-profile-facts b{color:#000!important}
  .osi-cv-ref,.osi-cv-act-proof,.osi-safe-links a,.osi-cv-permalink{color:#0b4f6c!important}
  .osi-public-profile>header,.osi-cv-entry,.osi-profile-facts,.osi-profile-facts>div,.osi-cv-summary,.osi-cv-summary>div,.osi-cv-permalink,.osi-cv-outcome{border-color:#999!important}
  .osi-cv-act-proof[href]::after{content:' (' attr(href) ')';font-weight:400;color:#444!important;word-break:break-all}
  .osi-cv-permalink{border:0!important;padding-left:0!important}
  .osi-cv-entry,.osi-history-row{break-inside:avoid;page-break-inside:avoid}
  .osi-cv-record h4,.osi-public-profile h4{break-after:avoid;page-break-after:avoid}
}
