/* The plate sheet — one licence, six groups, opened over any surface.
 * Dark-only, same palette as the dashcam and the console. */
.psheet{display:none;position:fixed;inset:0;z-index:90;background:rgba(0,0,0,.66);
  align-items:flex-start;justify-content:center;padding:32px 20px;overflow-y:auto}
.psheet.open{display:flex}
.psheet-box{width:min(640px,100%);background:#10131c;border:1px solid #2a3348;border-radius:14px;
  box-shadow:0 28px 70px rgba(0,0,0,.6);color:#e6e9f0;font-family:Inter,sans-serif;overflow:hidden}
.psheet-loading{padding:28px;color:#94a3b8;font-size:13px;display:flex;gap:12px;align-items:center}

/* head: the plate, the verdict, one line */
.psheet-head{display:flex;align-items:center;gap:14px;padding:14px 16px;border-bottom:1px solid #1d2333}
/* plate and the permissions it carries, together — the card and its class */
.ps-platecol{flex:0 0 auto;display:flex;flex-direction:column;gap:6px;align-items:flex-start;max-width:180px}
.ps-plate{flex:0 0 auto}
.ps-wordrow{display:flex;align-items:center;gap:7px;margin-top:4px}
.ps-id{min-width:0;flex:1}
/* the NAME goes where a name goes. The state word underneath it was reading
 * as the owner's name simply by sitting in that position. */
/* name and state share a line — the state qualifies the thing named */
.ps-namerow{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap}
.ps-name{font-size:14px;font-weight:600;color:#e6e9f0;line-height:1.2}
.ps-word{font-family:Poppins,sans-serif;font-size:12.5px;letter-spacing:.9px}
.ps-word.green{color:#8ee4a0}
.ps-word.amber{color:#fcd77d}
.ps-word.red{color:#ff9a9a}
.ps-word.grey{color:#a3b0c2}
.ps-line{font-size:11.5px;color:#94a3b8;margin-top:3px}
/* offered only when something is wrong — same modal as the dashcam's lamp */
.ps-why{margin-top:7px;background:#2a1215;border:1px solid #ef444455;color:#ffb4ab;border-radius:8px;
  padding:4px 9px;font:inherit;font-size:11px;cursor:pointer}
.ps-why:hover{filter:brightness(1.15)}
/* the verdict nothing can be done about: still reachable, never the headline */
.ps-foot{margin-top:7px;background:none;border:0;padding:0;text-align:left;
  font:inherit;font-size:10.5px;color:#64748b;cursor:pointer;line-height:1.4}
/* Demote a verdict by POSITION and SIZE, never by hue: OMISSION is
 * #ff9a9a wherever it appears — the dashcam's lamp, the card, the modal,
 * and here. Greying the word made the same finding look like two
 * different findings depending on which surface you read it on. */
.ps-foot b{font-weight:600;color:#94a3b8}
.ps-foot b.red{color:#ff9a9a}
.ps-foot b.amber{color:#fcd77d}
.ps-foot b.grey{color:#a3b0c2}
.ps-foot:hover{color:#94a3b8}
.ps-x{margin-left:auto;background:none;border:1px solid #2a3348;color:#94a3b8;border-radius:8px;
  width:28px;height:28px;cursor:pointer;font:inherit;line-height:1;flex:0 0 auto}
.ps-x:hover{color:#e6e9f0}

/* the action bar: everything you came to DO, one row, directly under the
 * plate. The sections below are for reading. */
.ps-actions{display:flex;align-items:center;justify-content:space-evenly;gap:6px;flex-wrap:wrap;
  padding:10px 16px;border-bottom:1px solid #1d2333;background:#0e111a}
/* the bar's status takes its own centred line so it can't unbalance the row */
.ps-actions .ps-status{flex:0 0 100%;order:9;text-align:center}
.ps-act{background:#1a2132;border:1px solid #3d4a63;color:#e2e8f2;border-radius:8px;padding:6px 11px;
  font:inherit;font-size:11px;font-weight:600;letter-spacing:.05em;cursor:pointer;text-decoration:none;
  display:inline-flex;align-items:center;white-space:nowrap}
.ps-act:hover{color:#ffffff;border-color:#5a6c94;background:#212a40}
/* RUN — the go verb, green against STOP's red right beside it. */
.ps-act.runact{color:#9ef0af;border-color:#22c55e88;background:#122a1a}
.ps-act.runact:hover{border-color:#22c55e}
/* Unavailable, not inert: aria-disabled keeps the button hoverable and
   clickable so its reason can be read. A `disabled` button swallows pointer
   events and explains nothing. */
.ps-act[aria-disabled="true"]{opacity:.45;cursor:help}
.ps-act[aria-disabled="true"]:hover{color:#cbd5e1;border-color:#3d4d73}
.ps-act.stop{color:#ff9a9a;border-color:#ef444466;background:#2a1215}
.ps-act.stop:hover{border-color:#ef4444}
.ps-act.on{color:#8ee4a0;border-color:#22c55e;background:#14311f}
.ps-act.warnact{color:#ffdf94;border-color:#f59e0b77;background:#241c0d}
.ps-act.warnact:hover{border-color:#f59e0b}
/* armed: the second click is the one that does it */
.ps-act.armed{color:#fff;background:#7f1d1d;border-color:#ef4444}
/* the one-way door sits apart from the things you do every day */
.ps-act.last{margin-left:10px}
.ps-activity{font-size:11px;color:#64748b;margin:9px 0 0;line-height:1.5}

.psheet-body{padding:6px 16px 16px}
.ps-sec{padding:14px 0;border-bottom:1px solid #161c2b;position:relative}
.ps-sec:last-child{border-bottom:none}
.ps-sec h4{margin:0 0 10px;font-size:10.5px;letter-spacing:.07em;text-transform:uppercase;
  color:#64748b;font-weight:600;display:flex;align-items:center;gap:6px}
/* the definition lives here, not in a paragraph under every heading */
.ps-help{width:14px;height:14px;border-radius:50%;border:1px solid #2a3348;background:none;
  color:#64748b;font:inherit;font-size:9px;line-height:1;cursor:help;padding:0;
  display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}
.ps-help:hover,.ps-help.on{color:#e6e9f0;border-color:#3d4d73}
/* The definition is a hover panel, not a paragraph: absolutely positioned so
 * revealing it never reflows the section under the cursor. */
.ps-note{position:absolute;left:0;right:0;top:26px;z-index:3;margin:0;
  background:#141926;border:1px solid #2a3348;border-radius:8px;padding:8px 10px;
  font-size:11px;color:#94a3b8;line-height:1.5;
  box-shadow:0 8px 22px rgba(0,0,0,.5);opacity:0;visibility:hidden;
  transition:opacity .12s ease,visibility .12s ease}
.ps-sec h4:hover ~ .ps-note,
.ps-sec summary:hover ~ .ps-note,
.ps-sec.pinned .ps-note{opacity:1;visibility:visible}

/* Folding sections (Identity / Authority / Equipment): collapsed to their
 * headings by default — reference material, not dashboard. Control never
 * folds. Native <details>; the chevron is the only affordance needed. */
details.ps-sec.fold>summary{list-style:none;cursor:pointer;user-select:none;
  border-radius:8px;padding:4px 8px;margin:0 -8px}
details.ps-sec.fold>summary:hover{background:#141926}
details.ps-sec.fold>summary::-webkit-details-marker{display:none}
details.ps-sec.fold>summary h4{margin:0}
details.ps-sec.fold[open]>summary h4{margin:0 0 10px}
.ps-chev{margin-left:auto;color:#3d4d73;font-size:11px;transition:transform .15s ease;flex:0 0 auto}
details.ps-sec.fold[open] .ps-chev{transform:rotate(90deg)}
details.ps-sec.fold>summary:hover h4{color:#94a3b8}
/* the closed fold still tells its one-line truth; open, the rows take over */
.ps-digest{margin-left:auto;padding-left:12px;color:#4b5a72;font-size:10.5px;
  font-weight:500;letter-spacing:0;text-transform:none;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:0 1 auto}
details.ps-sec.fold[open] .ps-digest{display:none}
.ps-empty{font-size:12px;color:#64748b;margin:0}

/* fields */
.ps-field{display:flex;align-items:center;gap:10px;margin-bottom:8px;font-size:12.5px;color:#94a3b8}
.ps-field > span:first-child{flex:0 0 170px;color:#64748b}
.ps-field > span:last-child{color:#e6e9f0}
.ps-field input,.ps-field select{flex:1;min-width:0;background:#141926;color:#e6e9f0;
  border:1px solid #2a3348;border-radius:8px;padding:6px 10px;font:inherit;font-size:12.5px}
.ps-field input:focus,.ps-field select:focus{outline:none;border-color:#3d4d73}
/* The address is read-and-copy, not edit — it is issued, not chosen. Shaped
   like the inputs above it so the row still scans as one column, but it is a
   code span: an address is a literal, and a proportional font hides the
   difference between l and 1 in a plate. */
.ps-addr{flex:1;min-width:0;display:flex;align-items:center;gap:8px;background:#141926;
  border:1px solid #2a3348;border-radius:8px;padding:4px 4px 4px 10px}
.ps-addr code{flex:1;min-width:0;overflow-x:auto;white-space:nowrap;color:#e6e9f0;
  font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}
.ps-addr .ps-copy{flex:0 0 auto;padding:4px 10px;font-size:11.5px}
.ps-addr .ps-copy:disabled{opacity:.5;cursor:default}

.ps-row{display:flex;align-items:center;gap:8px;margin-top:10px;font-size:12.5px}
.ps-row.wrap{flex-wrap:wrap}
.ps-btn{background:#141926;border:1px solid #2a3348;color:#e6e9f0;border-radius:8px;padding:6px 12px;
  font:inherit;font-size:12px;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;white-space:nowrap}
.ps-btn:hover{border-color:#3d4d73}
.ps-btn.primary{border-color:#22c55e77;color:#8ee4a0}
.ps-chip.ok{border-color:#2f6b4c;color:#86efac}
.ps-adv{font-size:11.5px;color:#8FA6C0;text-decoration:none;letter-spacing:.02em;white-space:nowrap;margin-left:4px}
.ps-adv:hover{color:#c9d4e3;text-decoration:underline}
.ps-btn.danger{border-color:#ef444466;color:#ff9a9a;background:#2a1215}
.ps-btn.ok{border-color:#22c55e;color:#8ee4a0;background:#14311f}
.ps-status{font-size:11.5px;color:#64748b}

/* the licence class, printed with the plate — like a driving licence's
 * endorsements. Changed under AUTHORITY, never here. */
.ps-class{display:flex;flex-wrap:wrap;gap:4px}
/* the editor: one row per area, disposition spelled out */
.ps-grants{display:flex;flex-direction:column;gap:6px}
.ps-grant{display:flex;align-items:center;gap:8px}
.ps-garea{flex:0 0 110px;font-size:12.5px;color:#e6e9f0}
.ps-gdisp{flex:1;min-width:0;background:#141926;color:#e6e9f0;border:1px solid #2a3348;
  border-radius:8px;padding:5px 9px;font:inherit;font-size:12px}
.ps-grm{background:none;border:1px solid #2a3348;color:#64748b;border-radius:7px;width:24px;height:24px;
  cursor:pointer;font:inherit;line-height:1;flex:0 0 auto}
.ps-grm:hover{color:#ff9a9a;border-color:#ef444466}
/* the envelope: the ceilings that ride with a grant — per-action max, expiry,
 * rate, rolling budget. These are the licence's fine print; hiding them made
 * the editor blind-sign over fields it couldn't show. */
.ps-grant{flex-wrap:wrap}
.ps-genv{flex-basis:100%;display:flex;flex-wrap:wrap;gap:6px 14px;padding:2px 0 2px 118px;font-size:11px;color:#64748b}
.ps-genv label{display:inline-flex;align-items:center;gap:5px;white-space:nowrap}
.ps-genv input,.ps-genv select{background:#10141f;color:#cbd5e1;border:1px solid #232c40;border-radius:6px;
  padding:2px 6px;font:inherit;font-size:11px}
.ps-genv input[type=number]{width:74px}
.ps-genv input[type=date]{width:118px;color-scheme:dark}
.ps-genv input::placeholder{color:#3d4a63}
.ps-genv .ps-gexpired{color:#fcd77d}
@media (max-width:560px){.ps-genv{padding-left:0}}
/* authority edit history — the trail a licence carries with it */
.ps-ghist{margin-top:8px;font-size:11.5px;color:#64748b}
.ps-ghist summary{cursor:pointer;color:#94a3b8}
.ps-ghist summary:hover{color:#cbd5e1}
.ps-ghrow{display:flex;flex-wrap:wrap;gap:4px 12px;padding:4px 0 4px 14px;border-left:2px solid #232c40;margin:6px 0 0 4px}
.ps-ghwhen{color:#94a3b8;white-space:nowrap}
.ps-ghby{color:#64748b}
.ps-ghset{flex-basis:100%;color:#7d8aa3}
.ps-ghnote{margin:8px 0 0 4px;font-size:10.5px;color:#4b5871}
.ps-ghnote a{color:#7da9e8}
.ps-addarea{background:#141926;color:#e6e9f0;border:1px solid #2a3348;border-radius:8px;
  padding:5px 9px;font:inherit;font-size:12px}
.ps-chips{display:flex;flex-wrap:wrap;gap:6px}
.ps-chip{font-size:10.5px;padding:2px 8px;border-radius:999px;border:1px solid #2a3348;color:#94a3b8;white-space:normal;overflow-wrap:anywhere;max-width:100%;display:inline-block;line-height:1.35}
.ps-chip.ok{border-color:#22c55e55;color:#8ee4a0;background:#12271a}
.ps-chip.warn{border-color:#f59e0b55;color:#fcd77d;background:#241d10}
/* expired milk (14 Sep 2026): a thing that LAPSED — presumed gone, stale login, expired share — is purple, never amber */
.ps-chip.expired{border-color:#7e22ce;color:#a855f7;background:#24103a}
.ps-chip.bad{border-color:#ef4444;color:#ff9a9a;background:#2a1215;font-weight:700}
.ps-chip.dim{border-style:dashed;color:#64748b}

/* equipment, grouped by machine */
.ps-host{margin-bottom:12px}
.ps-host:last-child{margin-bottom:0}
.ps-hostname{font-size:12px;color:#e6e9f0;font-weight:600;margin-bottom:4px;
    display:flex;align-items:center;gap:8px}
/* Re-fit sits with the machine it acts on, quiet until wanted: it is
   maintenance, not one of the five verbs in the action bar. */
.ps-refit{margin-left:auto;font:inherit;font-size:10.5px;font-weight:600;
    letter-spacing:.04em;text-transform:uppercase;padding:2px 9px;border-radius:6px;
    background:transparent;border:1px solid #2a3346;color:#94a3b8;cursor:pointer}
.ps-refit:hover:not(:disabled){border-color:#3d4a63;color:#e6e9f0;background:#161c2b}
.ps-refit:disabled{opacity:.55;cursor:default}
/* Re-adopt takes a host-global credential off another plate — amber, and it
   asks before it does. */
.ps-refit.warns{color:#fcd77d;border-color:#f59e0b55}
.ps-refit.warns:hover:not(:disabled){border-color:#f59e0b;background:#2a2113}
.ps-remove{font:inherit;font-size:10.5px;font-weight:600;letter-spacing:.04em;
    text-transform:uppercase;padding:2px 9px;border-radius:6px;margin-left:6px;
    background:transparent;border:1px solid #4a2530;color:#c88;cursor:pointer}
.ps-remove:hover{border-color:#ef4444;color:#fca5a5;background:#2a1416}
.ps-remove-arm{font-size:11.5px;line-height:1.6;color:#c8cfdd;background:#1a1216;
    border:1px solid #4a2530;border-radius:8px;padding:8px 10px;margin-top:6px}
.ps-remove-arm .ps-btn{margin-left:6px}
.ps-remove-arm .ps-btn.warns{color:#fca5a5;border-color:#ef444466}
.ps-rm-retire-row{display:block;margin-top:7px;font-size:11px;color:#8b93a7;cursor:pointer}
.ps-rm-retire-row input{margin-right:6px;vertical-align:-1px}
.ps-fork{display:block;width:100%;font-size:11.5px;color:#fcd77d;margin:0 0 4px}
.ps-endnote{font-size:12px;line-height:1.55;color:#94a3b8;padding:2px 4px}
.ps-endnote b{color:#c8cfdd}
.ps-hostharness{color:#8b93a7;font-weight:500;font-size:12px;margin-left:2px}
.ps-spin{display:inline-block;width:11px;height:11px;margin-right:7px;vertical-align:-1px;
    border:2px solid #2a3346;border-top-color:#8ee4a0;border-radius:50%;
    animation:ps-spin .8s linear infinite}
@keyframes ps-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.ps-spin{animation-duration:2.4s}}
.ps-cmdout{margin:7px 0 0;padding:8px 10px;border:1px solid #1d3a28;border-radius:8px;
    background:#08120d;color:#7fdc9a;font-family:ui-monospace,Menlo,Consolas,'Courier New',monospace;
    font-size:10.5px;line-height:1.55;white-space:pre-wrap;overflow-wrap:break-word;
    max-height:280px;overflow:auto}
.ps-cmdout.bad{border-color:#4a2530;background:#150e10;color:#fca5a5}
.ps-host.gone{opacity:.6}
.ps-host.gone .ps-hostname{color:#8b93a7}
.ps-refit[data-armed]{color:#fff;background:#7a5a12;border-color:#f59e0b}
.ps-refit-off{margin-left:auto;font-size:10.5px;color:#4b5563;cursor:help;
    letter-spacing:.04em;text-transform:uppercase}
.ps-refit-status:not(:empty){margin-top:6px}
/* Dealer-fitted rows are what a re-fit actually replaces — the factory and
   owner rows below it are untouched, so don't imply otherwise. */
.ps-table tr.ps-dealer td:first-child{box-shadow:inset 2px 0 0 -1px #2a3346}
.ps-table{width:100%;border-collapse:collapse;font-size:12px}
.ps-table td:first-child{width:170px}   /* the one label column (12 Sep 2026) */
.ps-table td:nth-child(2){width:64px;font-size:10.5px;letter-spacing:.04em;text-transform:uppercase}
.ps-table td:last-child{text-align:right}
.ps-table td{padding:5px 8px 5px 0;border-bottom:1px solid #161c2b;color:#cbd5e1;vertical-align:middle}
.ps-table td.dim{color:#64748b;font-size:11px}
.ps-table tr:last-child td{border-bottom:none}

.ps-pre{margin:8px 0 0;padding:9px 11px;background:#0a0d13;border:1px solid #1d2333;border-radius:8px;
  font-family:ui-monospace,Menlo,monospace;font-size:11px;color:#8ee4a0;white-space:pre-wrap;word-break:break-all}

/* Licence proposal: the evidence sits WITH the thing it justifies, so the
   approver reads why before they approve what. NOT .ps-why — that class is
   already the red verdict button in the sheet head, and reusing it here
   would restyle the one control that explains a bad lamp. */
.ps-note-inline{font-size:11.5px;color:#94a3b8;line-height:1.5;margin:0 0 10px}
.ps-preason{font-size:10.5px;color:#64748b;line-height:1.45;margin:2px 0 10px 2px}

/* INSTALL is a jump to the deployment block; the flash says where you landed,
   because a silent scroll on a long sheet reads as a button that did nothing. */
.ps-flash { animation: psFlash 1.2s ease-out; border-radius: 8px; }
@keyframes psFlash {
    0%   { background: rgba(3,192,60,0.18); }
    100% { background: transparent; }
}

/* Resident supervisor facts.
 *
 * A manager plate used to render the ordinary agent sheet, whose coverage
 * lamp says "no host recorder is reconciling" — about the host recorder.
 * These are the facts a person opens a manager to find: which host, which
 * version, when it last spoke, and what its census can see there. */
.ps-mgr{border:1px solid #2a3348;border-radius:10px;background:#141926;padding:12px 14px;margin:0 0 12px}
.ps-mgr-head{font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:#94a3b8;
  display:flex;align-items:center;gap:10px;margin:0 0 10px}
.ps-mgr-row{display:flex;gap:12px;align-items:baseline;padding:3px 0;font-size:12.5px}
.ps-mgr-k{min-width:170px;color:#64748b;flex:0 0 auto}
.ps-mgr-v{color:#e6e9f0}
.ps-mgr-note{margin:10px 0 0;padding:8px 10px;border-radius:8px;font-size:12px;line-height:1.55;
  border:1px solid rgba(245,158,11,.35);background:rgba(245,158,11,.08);color:#fcd77d}

/* Self-reports from the machine. Deliberately quieter than the rows above:
   these are the machine's own claims over an unauthenticated channel, and must
   not read as registry-verified facts sitting inches away from ones that are. */
.ps-mgr-reports{margin:12px 0 0;padding:10px 0 0;border-top:1px dashed rgba(148,163,184,.25)}
.ps-report{display:flex;gap:10px;align-items:baseline;padding:3px 0;font-size:12px;line-height:1.5}
.ps-report-at{flex:0 0 auto;min-width:74px;color:#64748b;font-variant-numeric:tabular-nums}
.ps-report-msg{color:#c9d2e3;word-break:break-word}
/* A correction to the row it sits in, not a second fact competing with it. */
.ps-ver-claim{display:inline-block;margin-left:8px;padding:1px 7px;border-radius:999px;font-size:11px;
  border:1px solid rgba(148,163,184,.35);background:rgba(148,163,184,.12);color:#94a3b8}

/* Bootstrap: the remedy sits with the fault, in the manager panel, because a
   fix you have to go and find on another page is a fix people do not apply. */
.ps-boot{margin:10px 0 0}
/* A finished install is the answer to the question the panel was asked, and it
   used to arrive in 11.5px grey beneath a wall of other 11.5px grey. Monospace
   because it is a machine talking, and large enough that nobody has to go
   looking for the outcome of something they just authorised. */
.ps-status[data-cmd-status="completed"]{
    font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Courier New",monospace;
    font-size:14px;line-height:1.5;color:#5ee88a;
    background:rgba(3,192,60,.08);border:1px solid rgba(3,192,60,.32);
    border-radius:8px;padding:9px 11px;margin-top:8px;word-break:break-word}
.ps-status[data-cmd-status="failed"],
.ps-status[data-cmd-status="expired"]{
    font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,"Courier New",monospace;
    font-size:13px;line-height:1.5;color:#ff9a9a;
    background:rgba(239,68,68,.07);border:1px solid rgba(239,68,68,.28);
    border-radius:8px;padding:9px 11px;margin-top:8px;word-break:break-word}
/* Manual install: present, one click away, and not competing with the path
   that does the work for you. */
.ps-manual{margin-top:12px}
.ps-manual>summary{font-size:11.5px;color:#64748b;cursor:pointer;list-style:none}
.ps-manual>summary::-webkit-details-marker{display:none}
.ps-manual>summary::before{content:"▸ ";color:#475569}
.ps-manual[open]>summary::before{content:"▾ "}
.ps-manual>summary:hover{color:#94a3b8}
.ps-boot-help{font-size:12px;line-height:1.55;color:#94a3b8;margin-bottom:6px}
.ps-boot-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;
  padding:8px 10px;border-radius:8px;background:rgba(15,23,42,.6);
  border:1px solid rgba(148,163,184,.25)}
.ps-boot-row code{flex:1 1 320px;font-size:11.5px;color:#dbe4f5;word-break:break-all}
.ps-mgr-note.bad{border-color:rgba(239,68,68,.4);background:rgba(239,68,68,.09);color:#fca5a5}
.ps-mgr-note.bad .ps-btn{margin-top:8px}
/* Reports predating the last accepted check-in: kept, but visibly past. The
   machine has since been heard from, which answers whatever they complained of. */
.ps-report.past{opacity:.45}
.ps-report.past .ps-report-msg{color:#94a3b8}

/* The signing ceremony: amber, bordered, unmissable — a decision is being
   requested, and it must not look like a status line. */
.ps-status[data-cmd-status="awaiting_signature"]{
    font-size:12.5px;line-height:1.55;color:#ffd08a;
    background:rgba(255,179,71,.07);border:1px solid rgba(255,179,71,.32);
    border-radius:8px;padding:10px 12px;margin-top:8px}
.ps-status[data-cmd-status="awaiting_signature"] .ps-btn.primary{
    background:#2a5a2a;color:#fff;border:none}

/* Signing ceremony modal — above the plate sheet, unmistakably a decision. */
.cer-wrap{position:fixed;inset:0;z-index:10000;background:rgba(8,6,12,.66);
    display:flex;align-items:center;justify-content:center;backdrop-filter:blur(2px)}
.cer-box{background:#1d1826;border:1px solid rgba(255,179,71,.4);border-radius:12px;
    padding:20px 22px;max-width:460px;width:calc(100% - 48px);box-shadow:0 18px 60px rgba(0,0,0,.5)}
.cer-box h3{margin:0 0 10px;font-size:16px;color:#ffd08a}
.cer-what{font-size:14px;color:#fff;font-weight:600;line-height:1.45}
.cer-sub{font-size:12px;color:#94a3b8;margin-top:8px;line-height:1.55}
.cer-clock{font-size:12px;color:#ffb347;margin-top:8px}
.cer-reason{width:100%;box-sizing:border-box;margin-top:12px;background:rgba(255,255,255,.05);
    border:1px solid rgba(255,255,255,.12);border-radius:8px;color:#eee;font:inherit;
    font-size:12.5px;padding:8px 10px;resize:vertical}
.cer-row{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}
.cer-msg{font-size:12px;color:#8b93a7;margin-top:10px;min-height:15px}
/* 4 Sep 2026: permissions are READ-ONLY on the sheet (the Admin desk edits). */
.ps-grant-ro{padding:4px 0;border-bottom:1px dotted rgba(255,255,255,.08)}
.ps-gdisp-ro{font-size:12px;padding:1px 8px;border-radius:5px;font-weight:600}
.ps-gdisp-allow{background:rgba(3,192,60,.14);color:#4ad07a}
.ps-gdisp-attest{background:rgba(217,70,239,.16);color:#e879f9}
.ps-gdisp-forbid{background:rgba(255,68,68,.14);color:#ff7070}
.ps-genv-ro{font-size:11px;color:#8FA6C0}

/* 12 Sep 2026 (Sean: 'typography and design is a disaster… simplify'): one key/value grammar for every
 * section, one Advanced door in the action bar, colour only where something needs attention. */
.ps-chip.quiet{color:#c8cfdd;border-color:#2f3a52;background:transparent}
.ps-attn{margin:0 0 12px;padding:8px 12px;border-radius:8px;background:#241d10;border:1px solid #f59e0b55;color:#fcd77d;font-size:12.5px;display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.ps-adv-act{color:#8FA6C0!important;border-color:#2a3348!important;background:transparent!important}
.ps-sec .ps-mgr-row{padding:4px 0}
.ps-sec .ps-mgr-k{min-width:170px}
.ps-sec .ps-mgr-v{color:#e6e9f0;flex:1 1 auto;min-width:0}
.ps-sec .ps-mgr-v .ps-table{margin-top:2px}
.ps-mgr-head{display:flex;align-items:center;gap:10px}
.ps-mgr-head .ps-adv{margin-left:auto;text-transform:none;letter-spacing:.02em;font-size:11.5px}
.ps-mintfit .ps-field{margin-bottom:8px}
.ps-mintfit .ps-field input,.ps-mintfit .ps-field select{flex:0 1 320px}

/* one label column everywhere: 170px + 12px gap, from the same left edge (Sean, 12 Sep 2026) */
.ps-mgr{margin:0 -14px 12px}
.ps-field{gap:12px}
.ps-grant{gap:12px}
.ps-garea{flex:0 0 170px;color:#64748b}
.ps-addr{background:none;border:0;padding:0;gap:10px}
.ps-addr code{padding:0}
