/* RanchRubric console — Build 002. 48U Ranch design tokens (see ranchduty parity notes). */
:root{
  --background:#0b0c0e; --foreground:#e8eaed;
  --card:#14161a; --popover:#1a1c21; --secondary:#1a1c21;
  --muted-fg:#8b9098; --border:#26292f;
  --primary:#d5d8de; --primary-fg:#0b0c0e;
  --ok:#7d9b82; --warn:#c4a574; --crit:#c17a72; --info:#8a96a3;
  --brand:#7e93c9; --brand-soft:#232936;
  --r-sm:8px; --r-md:12px; --r-xl:24px;
  --sans:"IBM Plex Sans",ui-sans-serif,system-ui,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,Menlo,monospace;
}
*{margin:0;padding:0;box-sizing:border-box;border-color:var(--border)}
html{-webkit-font-smoothing:antialiased}
body{background:var(--background);color:var(--foreground);font-family:var(--sans);font-size:15px;line-height:1.55;min-height:100vh}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer}
::selection{background:color-mix(in oklab,var(--brand) 30%,transparent)}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.muted{color:var(--muted-fg)}
.wrap{max-width:1080px;margin:0 auto;padding:0 16px}

/* top bar */
.topbar{border-bottom:1px solid var(--border)}
.topbar .wrap{display:flex;align-items:center;justify-content:space-between;gap:12px;height:56px}
.logo{display:inline-flex;align-items:center;gap:8px;font-weight:600;letter-spacing:-.01em}
.logo svg{width:26px;height:26px}
.topnav{display:flex;align-items:center;gap:6px}
.topnav a{padding:6px 12px;border-radius:var(--r-sm);color:var(--muted-fg);font-size:.9rem}
.topnav a.active{background:var(--brand-soft);color:var(--foreground)}
.topnav a:hover{color:var(--foreground)}
.userchip{font-size:.8rem;color:var(--muted-fg)}

main{padding:28px 0 64px}
h1{font-size:1.4rem;font-weight:600;letter-spacing:-.01em}
h2{font-size:1.05rem;font-weight:600}
.pagehead{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:20px}

/* buttons */
.btn{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:var(--r-sm);font-weight:500;font-size:.88rem;border:1px solid transparent;background:transparent;color:var(--foreground)}
.btn.primary{background:var(--primary);color:var(--primary-fg)}
.btn.primary:hover{background:#e4e7ec}
.btn.outline{border-color:var(--border)}
.btn.outline:hover{background:var(--secondary)}
.btn.danger{color:var(--crit);border-color:var(--border)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn:focus-visible{outline:2px solid var(--brand);outline-offset:2px}

/* cards, tables, forms */
.card{border:1px solid var(--border);border-radius:var(--r-xl);background:var(--card);padding:20px}
.card + .card{margin-top:16px}
.grid2{display:grid;gap:16px}
@media(min-width:760px){.grid2{grid-template-columns:1fr 1fr}}
table{width:100%;border-collapse:collapse;font-size:.9rem}
th{text-align:left;font-weight:500;color:var(--muted-fg);font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;padding:8px 10px;border-bottom:1px solid var(--border)}
td{padding:10px;border-bottom:1px solid var(--border)}
tr:last-child td{border-bottom:0}
tr.rowlink{cursor:pointer}
tr.rowlink:hover td{background:color-mix(in oklab,var(--secondary) 60%,transparent)}
label{display:block;font-size:.8rem;font-weight:500;color:var(--muted-fg);margin:12px 0 5px}
input,select,textarea{width:100%;padding:9px 11px;border-radius:var(--r-sm);border:1px solid var(--border);background:var(--popover);color:var(--foreground);font:inherit;font-size:.9rem}
input:focus,select:focus,textarea:focus{outline:2px solid var(--brand);outline-offset:0;border-color:transparent}
form .btn{margin-top:16px}
.formrow{display:grid;gap:0 14px}
@media(min-width:640px){.formrow{grid-template-columns:1fr 1fr}}
.hint{font-size:.78rem;color:var(--muted-fg);margin-top:4px}

/* chips & badges */
.chip{display:inline-block;padding:2px 9px;border-radius:999px;font-size:.72rem;font-weight:500;background:var(--secondary);color:var(--muted-fg)}
.chip.brand{background:var(--brand-soft);color:var(--brand)}
.chip.ok{background:color-mix(in oklab,var(--ok) 18%,transparent);color:var(--ok)}
.chip.warn{background:color-mix(in oklab,var(--warn) 18%,transparent);color:var(--warn)}
.chip.info{background:color-mix(in oklab,var(--info) 18%,transparent);color:var(--info)}
.chip.crit{background:color-mix(in oklab,var(--crit) 18%,transparent);color:var(--crit)}
.chip.private{background:color-mix(in oklab,var(--crit) 14%,transparent);color:var(--crit)}

/* scoring */
.cat{border:1px solid var(--border);border-radius:var(--r-md);background:var(--popover);margin-top:14px;overflow:hidden}
.cat-head{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 16px;background:var(--secondary)}
.cat-head .score{font-family:var(--mono);font-size:.9rem}
.crit{padding:14px 16px;border-top:1px solid var(--border)}
.crit-name{font-weight:500;font-size:.92rem}
.crit-desc{font-size:.8rem;color:var(--muted-fg);margin-top:2px}
.guidance{font-size:.78rem;color:var(--muted-fg);background:var(--card);border:1px solid var(--border);border-radius:var(--r-sm);padding:8px 10px;margin-top:8px}
.scorerow{display:flex;gap:10px;align-items:center;margin-top:10px;flex-wrap:wrap}
.scorebtns{display:flex;gap:4px}
.scorebtns button{width:36px;height:32px;border-radius:var(--r-sm);border:1px solid var(--border);background:var(--card);color:var(--muted-fg);font-family:var(--mono)}
.scorebtns button.sel{background:var(--brand);border-color:var(--brand);color:#0b0c0e;font-weight:600}
.scorerow select{width:auto;padding:6px 8px;font-size:.8rem}
.scorerow input[type=text]{flex:1;min-width:180px;padding:6px 10px;font-size:.82rem}

/* score bars & composite */
.bar{height:6px;background:var(--secondary);border-radius:3px;overflow:hidden;min-width:80px}
.bar i{display:block;height:100%;background:var(--brand);border-radius:3px}
.composite{display:flex;align-items:baseline;gap:10px}
.composite .num{font-family:var(--mono);font-size:2rem;font-weight:500}
.composite .grade{font-family:var(--mono);font-size:1.1rem;color:var(--brand)}
.sticky-foot{position:sticky;bottom:0;background:color-mix(in oklab,var(--background) 92%,transparent);backdrop-filter:blur(6px);border-top:1px solid var(--border);padding:12px 0;margin-top:24px}
.sticky-foot .wrap{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}

/* auth screens */
.authwrap{max-width:400px;margin:9vh auto 0;padding:0 16px}
.authwrap .logo{justify-content:center;width:100%;margin-bottom:22px;font-size:1.15rem}
.tabs{display:flex;gap:4px;background:var(--secondary);padding:4px;border-radius:var(--r-sm);margin-bottom:6px}
.tabs button{flex:1;padding:7px;border:0;border-radius:6px;background:transparent;color:var(--muted-fg);font-size:.85rem;font-weight:500}
.tabs button.sel{background:var(--card);color:var(--foreground)}

/* notices */
.notice{border:1px solid var(--border);border-left:3px solid var(--brand);border-radius:var(--r-sm);background:var(--card);padding:12px 14px;font-size:.85rem;margin:14px 0}
.notice.err{border-left-color:var(--crit);color:var(--crit)}
.notice.ok{border-left-color:var(--ok)}
.empty{padding:36px 16px;text-align:center;color:var(--muted-fg);font-size:.9rem}
dialog{border:1px solid var(--border);border-radius:var(--r-xl);background:var(--card);color:var(--foreground);padding:24px;max-width:520px;width:calc(100% - 32px)}
dialog::backdrop{background:rgba(0,0,0,.55)}
.loading{padding:40px;text-align:center;color:var(--muted-fg)}
@media (prefers-reduced-motion: reduce){*{transition:none!important;animation:none!important}}

/* ---------- Build 003: catalog, maps ---------- */
.filters{display:grid;gap:10px;grid-template-columns:1fr}
@media(min-width:760px){.filters{grid-template-columns:1.3fr .8fr 1fr 1.4fr}}
.filters select,.filters input{padding:8px 10px}
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.code{font-weight:500;color:var(--foreground)}
a.link{color:var(--brand)}
a.link:hover{text-decoration:underline}
dialog.wide{max-width:920px}
.detailgrid{display:grid;gap:20px;margin-top:16px}
@media(min-width:760px){.detailgrid{grid-template-columns:1fr 1.3fr;align-items:start}}
.card.detailgrid{margin-top:0}
dl.facts{display:grid;grid-template-columns:auto 1fr;gap:8px 16px;font-size:.88rem}
dl.facts dt{color:var(--muted-fg);font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;padding-top:2px}
dl.facts dd{line-height:1.5}
.mapbox{position:relative;border:1px solid var(--border);border-radius:var(--r-md);overflow:hidden;background:var(--secondary)}
.mapbox iframe{position:absolute;inset:0;width:100%;height:100%;border:0;filter:grayscale(.25) brightness(.92)}
.mapcover{position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:flex-end;padding:10px}
.mapcta{background:rgba(11,12,14,.82);color:var(--foreground);border:1px solid var(--border);border-radius:var(--r-sm);padding:6px 10px;font-size:.8rem;font-weight:500}
.mapcover:hover .mapcta,.mapcover:focus-visible .mapcta{background:var(--brand);color:#0b0c0e;border-color:var(--brand)}
.mapcover:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}

/* ---------- Build 004: documents, claims, evidence ---------- */
.dropzone{border:1.5px dashed var(--border);border-radius:var(--r-xl);padding:18px 20px;display:grid;gap:10px;background:color-mix(in oklab,var(--card) 60%,transparent)}
.dropzone.over{border-color:var(--brand);background:var(--brand-soft)}
.dzrow{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dzrow select{width:auto}
#uplog{display:grid;gap:4px}
.upline{font-size:.82rem;color:var(--muted-fg)}
.upline.ok{color:var(--ok)} .upline.warn{color:var(--warn)} .upline.err{color:var(--crit)}
.claim{padding:14px 16px;border-top:1px solid var(--border)}
.claim.accepted{box-shadow:inset 3px 0 0 var(--ok)}
.claim.rejected{box-shadow:inset 3px 0 0 var(--crit);opacity:.72}
.claim-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.claim-label{font-weight:500;font-size:.9rem;min-width:150px}
.claim-val{width:auto;flex:0 1 260px;padding:5px 9px;font-size:.85rem}
.pagelink{margin-left:auto;background:var(--secondary);border:1px solid var(--border);border-radius:6px;color:var(--brand);font-size:.75rem;padding:4px 8px}
.excerpt{margin:8px 0 0;padding:8px 12px;border-left:2px solid var(--border);color:var(--muted-fg);font-size:.82rem;line-height:1.55}
.excerpt mark{background:var(--brand-soft);color:var(--foreground);border-radius:3px;padding:0 2px}
.claim-actions{display:flex;gap:10px;align-items:center;margin-top:10px;flex-wrap:wrap}
.claim-actions select{width:auto;max-width:100%;padding:6px 8px;font-size:.8rem}
.seg{display:inline-flex;border:1px solid var(--border);border-radius:var(--r-sm);overflow:hidden}
.seg button{border:0;background:var(--card);color:var(--muted-fg);padding:6px 12px;font-size:.8rem;border-right:1px solid var(--border)}
.seg button:last-child{border-right:0}
.seg button.on.ok{background:color-mix(in oklab,var(--ok) 22%,transparent);color:var(--ok)}
.seg button.on.crit{background:color-mix(in oklab,var(--crit) 22%,transparent);color:var(--crit)}
.tabs button .mono{opacity:.7;margin-left:4px;font-size:.78rem}
.evid{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:10px}
.evid-h{font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted-fg);margin-right:4px}
.echip{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:.78rem;border:1px solid var(--border);border-radius:999px;padding:3px 6px 3px 10px;background:var(--card)}
.echip strong{font-weight:500}
.echip .rel{font-size:.68rem;text-transform:uppercase;letter-spacing:.06em}
.echip.supports{border-color:color-mix(in oklab,var(--ok) 45%,var(--border))} .echip.supports .rel{color:var(--ok)}
.echip.contradicts{border-color:color-mix(in oklab,var(--crit) 55%,var(--border))} .echip.contradicts .rel{color:var(--crit)}
.echip.avail{border-style:dashed;color:var(--muted-fg)}
.echip button{border:1px solid var(--border);background:var(--secondary);color:var(--foreground);border-radius:999px;padding:2px 9px;font-size:.72rem}
.echip button[data-rel="contradicts"]:hover{border-color:var(--crit);color:var(--crit)}
.echip button[data-rel="supports"]:hover{border-color:var(--ok);color:var(--ok)}
.echip .elink{color:var(--brand)}
.echip .ex{border:0;background:transparent;color:var(--muted-fg);font-size:.95rem;padding:0 6px}

/* ---------- Build 005: compliance ---------- */
.formrow4{display:grid;gap:0 12px;grid-template-columns:1fr 1fr}
@media(min-width:760px){.formrow4{grid-template-columns:repeat(4,1fr)}}
label.inline{display:flex;align-items:flex-start;gap:8px;font-size:.86rem;color:var(--foreground);margin:12px 0 0;font-weight:400}
label.inline input{width:auto;margin-top:3px}
.scopelist,.suglist{display:grid;gap:6px;max-height:220px;overflow:auto;padding:4px 2px}
.suglist div{font-size:.82rem}
.scopeitem{display:flex;align-items:center;gap:8px;font-size:.86rem;color:var(--foreground);margin:6px 0;font-weight:400;flex-wrap:wrap}
.scopeitem input{width:auto}
.issue{border:1px solid var(--border);border-radius:var(--r-md);background:var(--card);padding:14px 16px;margin-top:10px}
.issue.suggested{border-style:dashed}
.issue.dismissed,.issue.closed{opacity:.66}
.issue.open{box-shadow:inset 3px 0 0 var(--warn)}
.issue.risk_accepted{box-shadow:inset 3px 0 0 var(--info)}
.issue.remediated,.issue.closed{box-shadow:inset 3px 0 0 var(--ok)}
.issue-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.issue-top .pagelink{margin-left:0}
.issue-title{font-weight:500;margin-top:8px;font-size:.92rem}
.issue-edit{display:grid;gap:8px;margin-top:10px;grid-template-columns:1fr 1fr}
.issue-edit .wide{grid-column:1 / -1}
@media(min-width:760px){.issue-edit{grid-template-columns:150px 120px 1fr 150px auto}.issue-edit .wide{grid-column:1 / 5}}
.issue-edit input,.issue-edit select{padding:6px 9px;font-size:.84rem}
.signpanel{border-top:1px solid var(--border);margin-top:14px;padding-top:14px}
.signpanel h3{font-size:.95rem;font-weight:600}
.decisions{display:flex;gap:18px;flex-wrap:wrap}
.attest{background:var(--brand-soft);border-radius:var(--r-sm);padding:10px 12px}
.signpanel .btn{margin-top:14px}
.stmt{font-size:.8rem;color:var(--muted-fg);margin-top:6px;max-width:44ch;line-height:1.45}
.signtable td,.audittable td{vertical-align:top}
table.matrix td.cov{text-align:center;font-family:var(--mono);font-size:.78rem}
table.matrix th{text-align:center} table.matrix th:first-child{text-align:left}
td.cov a{display:inline-block;min-width:64px;padding:3px 8px;border-radius:999px}
td.cov.ok a{background:color-mix(in oklab,var(--ok) 20%,transparent);color:var(--ok)}
td.cov.warn a{background:color-mix(in oklab,var(--warn) 20%,transparent);color:var(--warn)}
td.cov.crit a{background:color-mix(in oklab,var(--crit) 20%,transparent);color:var(--crit)}
td.cov.pending a{background:var(--brand-soft);color:var(--brand)}
td.cov.none{color:var(--muted-fg)}

/* printable review record */
.record{max-width:960px}
.rec-head{display:flex;justify-content:space-between;gap:16px;border-bottom:2px solid var(--border);padding-bottom:14px;margin-bottom:8px}
.rec-kicker{font-size:.74rem;color:var(--muted-fg);letter-spacing:.06em}
.record h1{font-size:1.35rem;margin:4px 0}
.record h2{font-size:1rem;margin:22px 0 8px}
.rec-facts{grid-template-columns:140px 1fr}
.rec-table{width:100%;font-size:.84rem}
.rec-foot{font-size:.78rem;color:var(--muted-fg);margin-top:18px;line-height:1.5}
@media print{
  :root{--background:#fff;--foreground:#111;--card:#fff;--popover:#fff;--secondary:#f2f2f2;--muted-fg:#555;--border:#ccc;--brand:#34508f;--brand-soft:#e8ecf6;--ok:#2f6b3a;--warn:#8a6414;--crit:#9b3328}
  body{background:#fff;color:#111;font-size:11pt}
  .topbar,.noprint{display:none!important}
  main{padding:0}
  .record{max-width:none}
  .card{border:1px solid #ccc;box-shadow:none}
  .chip{border:1px solid #bbb}
  tr{page-break-inside:avoid}
  a{color:#111;text-decoration:none}
}

/* ---------- Build 005.1: handling ---------- */
fieldset.handling{border:1px solid var(--border);border-radius:var(--r-md);padding:4px 14px 14px;margin-top:16px}
fieldset.handling legend{padding:0 6px;font-size:.8rem;color:var(--muted-fg)}
.attlist{list-style:none;display:grid;gap:8px;font-size:.86rem}
button.link{background:none;border:0;padding:0;color:var(--brand);font:inherit;cursor:pointer}
button.link:hover{text-decoration:underline}

/* ---------- Build 006: deltas, alerts, reports ---------- */
.notice.warn{border-color:color-mix(in srgb,var(--warn) 45%,var(--border));color:var(--foreground)}
.btn.sm{padding:4px 9px;font-size:.76rem}
.scorerow .delta{display:inline-flex}
.scorerow select[data-claim]{width:auto;min-width:96px}
tr.dim td{opacity:.55}
.scorecard h2{font-size:1rem;margin:0 0 8px}
.bigscore{text-align:right}
.bigscore .num{font-family:var(--mono);font-size:2.6rem;font-weight:500;line-height:1}
.bigscore .grade{font-family:var(--mono);font-size:1.4rem;color:var(--brand);margin-left:8px}

/* ---------- Build 008: full assessment (tablet-first) ---------- */
.catnav{display:flex;gap:6px;overflow-x:auto;padding:4px 0 12px;position:sticky;top:0;z-index:5;background:var(--background)}
.catnav button{flex:0 0 auto;border:1px solid var(--border);background:var(--card);color:var(--muted-fg);border-radius:var(--r-sm);padding:7px 11px;font:inherit;font-size:.8rem;cursor:pointer}
.catnav button.sel{background:var(--brand-soft);color:var(--foreground);border-color:var(--brand)}
.catnav button.complete{color:var(--foreground)}
.catnav button.complete .mono{color:var(--ok)}
.ckitem{border-top:1px solid var(--border);padding:10px 0;display:grid;gap:8px}
.ckitem.done .ckq{color:var(--foreground)}
.ckq{font-size:.88rem;color:var(--muted-fg)}
.ckin{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.ckin .seg button{min-height:40px;min-width:58px}
.ckin input[type=number]{width:120px}
.ckin .cknote{flex:1;min-width:180px}
.numin{display:inline-flex;align-items:center;gap:6px}
.thumbs{display:flex;gap:6px;flex-wrap:wrap}
.thumb{width:56px;height:56px;border-radius:var(--r-sm);border:1px solid var(--border);background:var(--secondary);display:inline-flex;align-items:center;justify-content:center;overflow:hidden;cursor:pointer;font-size:.7rem}
.thumb img{width:100%;height:100%;object-fit:cover}
.thumb.pending{outline:2px dashed var(--warn);outline-offset:-2px}
.report h2{border-top:1px solid var(--border);padding-top:14px}
@media (max-width:820px){.ckin .cknote{min-width:100%}.scorerow{flex-wrap:wrap}}
@media print{.catnav,.sticky-foot{display:none!important}}

/* ---------- Build 016: tablet / touch pass ---------- */
.skip{position:absolute;left:-999px;top:8px;z-index:100;background:var(--popover);padding:8px 12px;border-radius:var(--r-sm)}
.skip:focus{left:8px}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.orgswitch{width:auto;max-width:220px;padding:5px 8px;font-size:.82rem}
@media (max-width:1100px){
  .topbar .wrap{height:auto;min-height:56px;flex-wrap:wrap;padding-top:6px;padding-bottom:6px}
  .topnav{order:3;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:2px}
  .topnav::-webkit-scrollbar{display:none}
  .topnav a{white-space:nowrap}
  .card{overflow-x:auto}
}
@media (pointer:coarse){
  .btn,.topnav a{min-height:44px;padding-top:10px;padding-bottom:10px}
  input,select,textarea,.orgswitch{font-size:16px;min-height:44px}
  input[type=checkbox],input[type=radio]{width:22px;height:22px;min-height:0}
  input[type=range]{min-height:32px}
  label{line-height:1.9}
  td,th{padding-top:12px;padding-bottom:12px}
  .chip{padding:4px 10px}
  .scorerow button,.scorebtn{min-width:44px;min-height:44px}
}
.sticky-foot{padding-bottom:calc(10px + env(safe-area-inset-bottom))}
@media (orientation:portrait) and (max-width:900px){ .detailgrid,.grid2{grid-template-columns:1fr} }

.samplebanner{background:#5a4a12;color:#fff3c4;text-align:center;padding:6px 12px;font-size:.88rem}
.samplebanner a{color:#fff;text-decoration:underline}
.clonebox{position:relative;display:inline-block}.clonebox>summary{list-style:none;cursor:pointer}.clonebox>summary::-webkit-details-marker{display:none}

/* ---------- Build 024: UI/UX review fixes (docs/UX-REVIEW-2026-10-15.md) ---------- */
/* U1: <main class="wrap"> lost its vertical padding to .wrap (class beats element), so pages sat 0px under the bar */
main.wrap{padding:28px 16px 64px}
/* U2: the global reset removed dialog's margin:auto, so every dialog opened in the top-left corner */
dialog{margin:auto}
/* U3: cards laid out by a grid or flex row must not inherit the stacked-card top margin (misaligned rows) */
.grid2>.card,[style*="display:grid"]>.card,[style*="display:flex"]>.card{margin-top:0}
.grid2>*,.formrow>*,.formrow4>*,.detailgrid>*{min-width:0}
.formrow4{grid-template-columns:repeat(2,minmax(0,1fr))}
@media(min-width:760px){.formrow4{grid-template-columns:repeat(4,minmax(0,1fr))}}
/* U4: plan cards keep their button on one baseline whatever the feature list length */
.plancard{display:flex;flex-direction:column}
.plancard>.btn{margin-top:auto;align-self:flex-start}
/* U5: chips never break mid-label ("in / progress", "−75 / vs / claim") */
.chip{white-space:nowrap}
/* U6: selects inside table cells (member role, risk status) collapsed to a bare chevron */
td select{width:auto;min-width:8rem}
/* U7: Team: members get the wider column, and stack until there is room for both */
.teamgrid{grid-template-columns:1fr}
@media(min-width:1000px){.teamgrid{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr)}}
/* U8: contrast: status text on tinted chips reaches 4.5:1 (crit was 4.25:1); placeholders readable */
:root{--crit-text:#cf8a82}
.chip.crit,.chip.private,td.cov.crit a,.seg button.on.crit{color:var(--crit-text)}
::placeholder{color:var(--muted-fg);opacity:1}
/* U9: links inside text are distinguishable without colour */
a.link,.notice a,.hint a,p a,button.link{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}
.topnav a,a.btn,a.card,.pagehead a.muted{text-decoration:none}
/* U10: denim is identity only: "pending" in the coverage matrix is a status, so it uses info */
td.cov.pending a{background:color-mix(in oklab,var(--info) 20%,transparent);color:var(--info)}
/* U11: keyboard focus is visible everywhere it can land */
tr.rowlink:focus-visible{outline:2px solid var(--brand);outline-offset:-2px}
tr.rowlink:focus-visible td{background:color-mix(in oklab,var(--secondary) 60%,transparent)}
label.btn:focus-visible,[role=region]:focus-visible{outline:2px solid var(--brand);outline-offset:2px}
.sr-only{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* U12: tables that scroll sideways show an edge shadow, so the hidden columns are discoverable */
.tablewrap{background:linear-gradient(to right,var(--card) 30%,transparent) left/40px 100% no-repeat local,linear-gradient(to left,var(--card) 30%,transparent) right/40px 100% no-repeat local,radial-gradient(farthest-side at 0 50%,rgba(232,234,237,.16),transparent) left/12px 100% no-repeat scroll,radial-gradient(farthest-side at 100% 50%,rgba(232,234,237,.16),transparent) right/12px 100% no-repeat scroll}
/* U13: headings and actions */
.sectionhead{margin:24px 0 10px}
.cardtitle{font-size:1.05rem;margin:0 0 6px}
.headactions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.headactions select{width:auto;max-width:100%}
.authwrap .logo svg{width:26px;height:26px}
/* U14: touch targets: back links and evidence buttons reach 32px+ on touch screens */
@media (pointer:coarse){
  .pagehead a.muted{display:inline-flex;align-items:center;min-height:36px}
  .echip button{min-height:32px;padding:4px 12px}
  .pagelink{display:inline-flex;align-items:center;min-height:32px}
  label.inline input[type=checkbox],label.inline input[type=radio],.scopeitem input[type=checkbox]{width:22px;height:22px;flex:0 0 22px;margin-top:0}
}
@media print{.tablewrap{background:none}}
/* U15: desktop bar with every nav item plus the org switcher (operators in two orgs) overflowed the page by ~80px
   between 1100 and 1240px: the nav now shrinks and scrolls inside the bar instead */
@media (min-width:1101px){
  .topnav{flex:1 1 auto;min-width:0;overflow-x:auto;scrollbar-width:none}
  .topnav::-webkit-scrollbar{display:none}
  .topnav a{white-space:nowrap;padding:6px 10px}
  .topbar .wrap>div:last-child{flex:0 0 auto}
  .orgswitch{max-width:180px}
}
.topnav.scrolls{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent);padding-right:24px}

/* ---------- Build 025: deferred UX items (docs/UX-REVIEW-2026-10-15.md D1-D10) ---------- */
/* D6: catalog on phones: one readable column (code, name, provider and market) instead of 2 of 5 columns */
.cat-sub{display:none;font-size:.76rem;margin-top:2px}
@media (max-width:600px){
  .cattable th:nth-child(n+2),.cattable td:nth-child(n+2){display:none}
  .cattable .cat-sub{display:block}
}
/* D5: empty states with an action */
.empty p{max-width:52ch;margin:0 auto}
/* D8: long comp reasons on the Orgs page stay two lines; the full text is in the tooltip */
.clamp2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* D6: catalog filters take two columns on phones, so the list starts on the first screen */
@media (max-width:759px){.filters{grid-template-columns:repeat(2,minmax(0,1fr))}.filters input{grid-column:1 / -1}}

/* ---------- Build 026: Account & security ---------- */
.acclist{list-style:none;display:grid;gap:10px;margin:8px 0 14px}
.codegrid{list-style:none;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 18px;margin:12px 0;padding:12px 14px;border:1px dashed var(--border);border-radius:var(--r-md);background:var(--popover);font-size:1rem;letter-spacing:.06em}
.codegrid li{padding:2px 0}
@media (min-width:1000px){.accgrid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
/* Print only the codes (Account > Recovery codes > Print) */
@media print{
  body.printing-codes *{visibility:hidden}
  body.printing-codes #acc-codelist,body.printing-codes #acc-codelist *{visibility:visible}
  body.printing-codes #acc-codelist{position:absolute;left:0;top:0;border:1px solid #999;color:#000;background:#fff;font-size:14pt}
  body.printing-codes #acc-codelist::before{content:"RanchRubric recovery codes - each works once";visibility:visible;grid-column:1 / -1;font-family:var(--sans);font-size:11pt;margin-bottom:6px}
}
.accgrid .card h2,#acc-lost h2{margin-bottom:8px}
#acc-codes > p{margin-bottom:10px}
