/* Metal Craft Engineering: the RDSO requirements and certifications pages (round B3, B2). Linked in the head of those
   two pages only, after theme.css, so every colour and chamfer comes from the theme's tokens (style.css, theme.css).
   - Page tabs (pagetabs.js, B7 contract d): .ptabs > nav.ptab-list > a.ptab, then .ptab-panel. Three levels on the RDSO
     page: the tab row (Ownership, Fabrication units, RDSO approval, ISO 9001:2015, Executed works), the sub-tabs
     (.ptabs--sub: a list beside the panel on wide screens, as the vendor portal's left menu; .ptabs--row: the two units,
     in a row), and each unit's section list (.ptabs--sec, the left menu again). Without scripts the tab rows are in-page
     contents lists and every panel shows, one after another; with scripts the inactive panels get [hidden].
   - Field/value rows (.rd-fields > .rd-field > dt + dd): one cut-corner plate per group, its rows parted by hairlines
     (round B3 F2, anti-slop 7: a plate per row read as a form).
   - The "What this means" boxes (.rd-claim), the certificate links (.rd-cert, .rd-thumb; certs.js opens the viewer),
     the two pointer plates beside the opening paragraph (.rd-quick) and the certificate plates of the certifications
     page (.rd-cert-grid, .rd-cert-card), and the embedded PDFs (.pdf-frame, .pdf-split, .pdf-links; owner 26 Oct 17:00).
   Cut-corner plates as in style.css: a rectangle with the top-left and bottom-right corners cut by --cut (6 px on tabs,
   8 px on a group of field rows, 12 px on certificate plates, 14 px on the claim boxes), filled with --fill and edged with --edge,
   --ew wide, by the background itself. No pills, no dots, no glows, no gradient text. */

:where(.ptab,.ptab-disc,.rd-fields,.rd-org>.rd-field,.rd-claim,.rd-quick-plate,.rd-cert-card,.pdf-frame,.pdf-plate){
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  --edge:var(--line);--fill:transparent;--ew:1px;
  background:linear-gradient(var(--edge),var(--edge)) top/100% var(--ew) no-repeat,linear-gradient(var(--edge),var(--edge)) bottom/100% var(--ew) no-repeat,
    linear-gradient(var(--edge),var(--edge)) left/var(--ew) 100% no-repeat,linear-gradient(var(--edge),var(--edge)) right/var(--ew) 100% no-repeat,
    linear-gradient(to bottom right,transparent 50%,var(--edge) 0 calc(50% + var(--ew)),transparent 0) top left/var(--cut) var(--cut) no-repeat,
    linear-gradient(to bottom right,transparent calc(50% - var(--ew)),var(--edge) 0 50%,transparent 0) bottom right/var(--cut) var(--cut) no-repeat,var(--fill)}
:where(.ptab,.ptab-disc){--cut:var(--cut-sm)}
:where(.rd-fields,.rd-org>.rd-field,.pdf-plate){--cut:var(--cut-md)}
:where(.rd-quick-plate,.rd-cert-card,.pdf-frame){--cut:var(--cut-lg)}
:where(.rd-claim){--cut:var(--cut-xl)}

/* ---------------------------------------------------------------- tabs */
.ptab-list{display:flex;flex-wrap:wrap;gap:8px}
.ptab{--edge:var(--line-2);display:inline-flex;align-items:center;min-height:44px;padding:0 1.1rem;color:var(--txt-2);font:500 .95rem/1.25 var(--sans);letter-spacing:-.01em;cursor:pointer;transition:--edge .25s,color .25s}
.ptab:hover,.ptab.touch-hover{--edge:var(--tab-hover,var(--txt-3));color:var(--txt)}
.ptab[aria-selected="true"]{--edge:var(--accent);--ew:1.5px;color:var(--accent-txt,var(--red-txt))}
/* slop-ok: outline-none replaced by designed :focus-visible (a 2 px edge in the plate's own shape, as the home tabs) */
.ptab:focus-visible{outline:none;--edge:var(--txt);--ew:2px}
.rd-tabs>.ptab-list{margin-bottom:clamp(28px,3.5vw,48px)}
.ptabs--sub,.ptabs--sec{margin-top:8px}
.ptabs--sub>.ptab-list,.ptabs--sec>.ptab-list{margin-bottom:24px}
.ptabs--sub .ptab,.ptabs--sec .ptab{min-height:44px;padding:8px 14px;font-size:.9rem;white-space:normal;text-align:left}
.ptab-panel{scroll-margin-top:calc(var(--hdr) + 24px)}
.ptab-panel:focus-visible{outline:2px solid var(--focus);outline-offset:8px}
/* A panel's heading repeats its tab's label: kept for the outline, the no-script page and print, hidden on screen
   while scripts run (the tab says it). */
@media screen{html.js .ptab-h{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}}
/* Before pagetabs.js has mounted (it is deferred), only the first panel of each set shows, or the one the address names,
   so the page does not open long and then fold. Without scripts (html:not(.js)) every panel shows. */
@media screen{html.js .ptabs:not(.is-tabs):not(.is-disclosure)>.ptab-panel:not(.ptab-list+.ptab-panel):not(:target):not(:has(:target)){display:none}}
/* Phones: a set that becomes disclosure rows (data-narrow) does not show its tab list while the script mounts. */
@media screen and (max-width:767px){html.js .ptabs[data-narrow="disclosure"]:not(.is-tabs):not(.is-disclosure)>.ptab-list{display:none}}
/* No scripts: the panels one after another, each under a hairline. */
html:not(.js) .ptabs>.ptab-panel+.ptab-panel{margin-top:clamp(40px,5vw,72px);padding-top:clamp(40px,5vw,72px);border-top:1px solid var(--line)}
html:not(.js) :is(.ptabs--sub,.ptabs--sec)>.ptab-panel+.ptab-panel{margin-top:28px;padding-top:28px}

/* Wide screens: a sub-tab list beside its panel, as the vendor portal's left menu (the two units stay in a row). */
@media (min-width:961px){
  :is(.ptabs--sub:not(.ptabs--row),.ptabs--sec).is-tabs{display:grid;grid-template-columns:minmax(12rem,16rem) minmax(0,1fr);gap:0 clamp(24px,3vw,48px);align-items:start}
  :is(.ptabs--sub:not(.ptabs--row),.ptabs--sec).is-tabs>.ptab-list{grid-column:1;grid-row:1;flex-direction:column;flex-wrap:nowrap;gap:6px;margin:0}
  :is(.ptabs--sub:not(.ptabs--row),.ptabs--sec).is-tabs>.ptab-list .ptab{width:100%}
  :is(.ptabs--sub:not(.ptabs--row),.ptabs--sec).is-tabs>.ptab-panel{grid-column:2;grid-row:1;min-width:0}
}

/* ---------------------------------------------------------------- text and headings inside the panels */
.rd-h4,.rd-h5{margin:0 0 16px;font-size:1.15rem;font-weight:500;line-height:1.3;letter-spacing:-.015em}
/* A top panel's name (p.rd-h3 since Q10 3-C; hidden on screen while scripts run): a small heading without scripts. */
.rd-h3{margin:0 0 20px;font-size:1.35rem;font-weight:500;line-height:1.25;letter-spacing:-.02em;color:var(--txt)}
.rd-p{max-width:70ch;margin-bottom:20px;color:var(--txt-2)}
.rd-p a,.rd-field a{color:var(--txt)}
/* The last block of a panel or group sets no margin of its own, so the section's padding is the only space under the
   tabs (B12 D2: the tab section measured 24 px deeper at its foot than the sections around it). */
:is(.ptab-panel,.rd-group,.ptab-body)>:last-child{margin-bottom:0}

/* Phones (below 768 px, devil phase 2): a unit's STR rows as stacked disclosure rows (pagetabs.js marks the set
   .is-disclosure, puts each heading's text in a button[aria-expanded] and shows or hides the row's .ptab-body). Each
   row is a small cut plate the width of the column; the open row takes the tone edge and label, as a selected tab does;
   the mark at the right turns from down to up. The desktop layout is unchanged. B5 (05:4x, build 3): 44 px rows edged
   with the 3:1 control edge (--line-3) like every outlined plate, the open row's edge 1 px in the tone, a plain chevron
   (two strokes) that turns in .2 s (at once under reduced motion), the row number in the label's colour once open, and
   the body set 14 px under its row with 20 px before the next; no shadows. */
.ptabs.is-disclosure{display:grid;gap:8px}
.ptabs.is-disclosure>.ptab-list{display:none}   /* [hidden] alone loses to the phone grid rule of the list */
.ptabs.is-disclosure>.ptab-panel>.ptab-h{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto;white-space:normal}
.ptab-disc{--edge:var(--line-3,var(--line-2));--fill:var(--surface);display:flex;align-items:center;gap:10px;width:100%;min-height:44px;padding:9px 14px;border:0;border-radius:0;
  color:var(--txt);font:500 .95rem/1.3 var(--sans);letter-spacing:-.01em;text-align:left;cursor:pointer;transition:--edge .25s,color .25s}
.ptab-disc::after{content:"";flex:none;margin-left:auto;width:7px;height:7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform .2s var(--ease)}
.ptab-disc[aria-expanded="true"]{--edge:var(--accent);--ew:1px;color:var(--accent-txt,var(--red-txt))}
.ptab-disc[aria-expanded="true"]::after{transform:translateY(2px) rotate(-135deg)}
.ptab-disc[aria-expanded="true"] .ptab-n{color:inherit}
.ptab-disc:hover{--edge:var(--tab-hover,var(--txt-3))}
.ptab-disc[aria-expanded="true"]:hover{--edge:var(--accent)}
/* slop-ok: outline-none replaced by designed :focus-visible (a 2 px edge in the plate's own shape, as the tabs) */
.ptab-disc:focus-visible{outline:none;--edge:var(--txt);--ew:2px}
.ptabs.is-disclosure>.ptab-panel>.ptab-body{padding:14px 0 20px}

/* Ownership Details: the STR's five rows, each a heading over its field plates. */
.rd-group+.rd-group{margin-top:clamp(28px,3vw,40px)}
/* The STR's row numbers on a unit's section list. */
.ptab-n{display:inline-block;min-width:1.6em;color:var(--txt-3);font-variant-numeric:tabular-nums}
.ptab[aria-selected="true"] .ptab-n{color:inherit}
/* Organisation chart: RDSO's template, roles only, one plate per level, each level set in a step. */
.rd-org{display:grid;gap:6px;max-width:40rem;margin:0 0 24px}
.rd-org .rd-field{--fill:var(--surface);display:flex;align-items:baseline;gap:14px;padding:14px 18px;color:var(--txt)}
.rd-org li:nth-child(2){margin-left:20px}.rd-org li:nth-child(3){margin-left:40px}.rd-org li:nth-child(4){margin-left:60px}
.rd-org-n{color:var(--txt-3);font-variant-numeric:tabular-nums}
/* The "What this means" box and the document after the field rows of a section. */
.rd-fields+.rd-doc{margin:8px 0 24px}

/* ---------------------------------------------------------------- field/value rows */
/* One plate per group, and inside it hairline rows set as the About fact sheet (style.css .facts): the label in small
   mono capitals, the value in the text face. */
.rd-fields{--fill:var(--surface);display:grid;max-width:68rem;margin:0 0 24px;padding:0 20px}
.rd-field{display:grid;grid-template-columns:minmax(9rem,15rem) minmax(0,1fr);gap:4px 24px;align-items:baseline;padding:14px 0}
.rd-fields>.rd-field+.rd-field{border-top:1px solid var(--line)}
.rd-field dt{font:500 .72rem/1.9 var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--txt-3)}
.rd-field dd{color:var(--txt);line-height:1.55;overflow-wrap:anywhere}
/* A unit's own address and area, above its section list: the unit card of the vendor portal. */
.rd-fields--unit{--edge:var(--line-3,var(--line-2))}
@media (min-width:641px){.rd-fields--pair{grid-template-columns:repeat(2,minmax(0,1fr));column-gap:24px;max-width:48rem}.rd-fields--pair .rd-field{grid-template-columns:1fr}.rd-fields--pair>.rd-field:nth-child(2){border-top:0}}
@media (max-width:640px){
  .rd-fields{padding:0 14px}
  .rd-field{grid-template-columns:1fr;gap:2px;padding:12px 0}
  .rd-field dt{font-size:14px}   /* the phone text floor (Q2-3), as style.css does for .facts dt */
  .rd-org .rd-field{padding:12px 14px}
  /* A unit's thirteen sections: two columns of plates on a phone, so the list stays short. */
  .ptabs--sec>.ptab-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  .rd-org li:nth-child(n){margin-left:0}
}

/* ---------------------------------------------------------------- "What this means" */
.rd-claim{--edge:var(--accent);--fill:var(--surface);display:grid;grid-template-columns:minmax(0,1fr);gap:20px 40px;max-width:68rem;padding:clamp(20px,2.6vw,34px)}
.rd-claim-t{margin:0;font-size:clamp(1.2rem,1.6vw,1.45rem);font-weight:500;line-height:1.25;letter-spacing:-.02em}
.rd-claim-k{margin-bottom:10px;font:500 .9rem/1.4 var(--sans);color:var(--accent-txt,var(--red-txt))}
.rd-claim ul{display:grid;gap:10px}
.rd-claim li{position:relative;padding-left:24px;color:var(--txt-2)}
.rd-claim li::before{content:"";position:absolute;left:0;top:.8em;width:12px;height:1px;background:var(--txt-3)}
.rd-claim-check{padding-top:18px;border-top:1px solid var(--line)}
.rd-claim-check p:last-child{color:var(--txt-2)}
@media (min-width:961px){.rd-claim{grid-template-columns:repeat(2,minmax(0,1fr))}.rd-claim-t,.rd-claim-check{grid-column:1/-1}}

/* ---------------------------------------------------------------- certificate links */
.rd-cert{display:flex;flex-wrap:wrap;align-items:center;gap:14px 24px;margin-top:20px}
/* The View button may wrap its words: beside a page picture on a phone it would otherwise push the page sideways (B12 D1). */
.rd-cert .btn{height:auto;min-height:3rem;max-width:100%;padding-block:.55rem;white-space:normal;line-height:1.3;text-align:left}
.rd-quick-body,.rd-cert-body{min-width:0}
.rd-dl{font-size:.9rem}
/* The first page of a document, small: a paper page on a hairline, opening the same viewer as the text link. */
.rd-thumb{display:block;width:76px;flex:none}
.rd-thumb a{display:block}
.rd-thumb img{width:100%;height:auto;background:#fff;box-shadow:0 0 0 1px var(--line-2)}
.rd-thumb a:hover img{box-shadow:0 0 0 1px var(--accent)}

/* A document's own sub-tab: its first page beside the View and Download links. */
.rd-doc{display:flex;flex-wrap:wrap;align-items:center;gap:20px 28px}
.rd-doc .rd-cert{margin:0}

/* The two pointer plates beside the opening paragraph. */
.rd-quick{display:grid;gap:10px;margin-top:32px}
.rd-quick-plate{--edge:var(--line-2);--fill:var(--surface);display:grid;grid-template-columns:76px minmax(0,1fr);gap:20px;align-items:start;padding:18px 20px}
.rd-quick-k{font:500 .85rem/1.4 var(--sans);color:var(--txt-3)}
.rd-quick-body p+p{margin-top:8px}
.rd-quick-body .link{font-size:.95rem}
.rd-quick .rd-cert{margin-top:14px}
@media (max-width:640px){.rd-quick-k{font-size:14px}}   /* the phone text floor (Q2-3) */

/* Executed works: the two links. */
.rd-more{display:flex;flex-wrap:wrap;gap:12px 28px}

/* ---------------------------------------------------------------- certifications page */
.rd-cert-grid{display:grid;gap:var(--gap);grid-template-columns:repeat(auto-fit,minmax(min(100%,22rem),1fr))}
.rd-cert-grid--pdf{grid-template-columns:minmax(0,1fr);margin-bottom:var(--gap)}
/* The four other approvals: two by two wherever two fit, never three and an orphan (Q1-5). */
@media (min-width:880px){.rd-cert-grid:not(.rd-cert-grid--pdf):not(.rd-cert-grid--three){grid-template-columns:repeat(2,minmax(0,1fr))}}
.rd-cert-card{--fill:var(--surface);padding:clamp(20px,2.4vw,32px);scroll-margin-top:calc(var(--hdr) + 24px)}
.rd-cert-card:target{--edge:var(--accent);--ew:1.5px}
.rd-cert-card--pdf{display:grid;grid-template-columns:minmax(0,1fr);gap:clamp(18px,2.4vw,32px);align-items:start}
/* The welding training certificates: three plates side by side from 1024 px (each a portrait page), one under another below. */
.rd-weld-h{margin:clamp(28px,3vw,44px) 0 16px}
@media (min-width:1024px){.rd-cert-grid--three{grid-template-columns:repeat(3,minmax(0,1fr))}}
.rd-cert-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:6px 16px;margin-bottom:16px}
.rd-cert-head h3{font-size:1.2rem}
/* Inside a certificate plate the group is not a plate of its own: hairline rows only. */
.rd-cert-card .rd-fields{clip-path:none;background:none;padding:0;margin-bottom:18px;border-bottom:1px solid var(--line)}
.rd-cert-card .rd-field{grid-template-columns:minmax(7.5rem,11rem) minmax(0,1fr);padding:10px 0;border-top:1px solid var(--line)}
.rd-cert-text p{max-width:70ch;color:var(--txt-2)}
.rd-cert-text p+p{margin-top:12px}
/* "What this proves" (D3's one line, Q1-5): a plain line in the text colour under a hairline, as the claim box's check
   line; no badge. */
.rd-cert-text p.rd-proves{margin-top:14px;padding-top:12px;border-top:1px solid var(--line);color:var(--txt)}
/* The works-register sentence after the four approvals. */
.rd-reg{margin:clamp(20px,2.4vw,32px) 0 0}
/* Phones: the pointer plates drop their page picture (it is in the sections too), so the links take the full width. */
@media (max-width:480px){.rd-quick-plate{grid-template-columns:minmax(0,1fr)}.rd-quick-plate .rd-thumb{display:none}}
@media (max-width:640px){
  .rd-cert-card .rd-field{grid-template-columns:1fr}
}

/* From 1024 px a page picture is large enough to read its layout (Q1-5: 76 to 120 px wide was unreadable): 140 px,
   about 200 px tall. */
@media (min-width:1024px){
  .rd-thumb{width:140px}
  .rd-quick-plate{grid-template-columns:140px minmax(0,1fr)}
}

/* The certificate viewer (certs.js opens app.js's photo viewer with .is-doc; this file is on both pages that have
   one): every page in the same A4 frame, so the frame never moves between pages (Q1-5); certs.js holds the caption at
   the height of the longest caption of the document. */
.photo-viewer.is-doc{--doc-h:62dvh}
@media (max-width:640px),(max-height:500px){.photo-viewer.is-doc{--doc-h:50dvh}}
@media (max-height:560px){.photo-viewer.is-doc{--doc-h:calc(94dvh - 193px)}}
/* The image box is the page's own shape and size before the file arrives (Q15: a black or half-drawn pane for up to
   1.2 s): a dim sheet in the board's tone stands in, and the page draws over it. */
.photo-viewer.is-doc figure img{display:block;width:auto;height:min(var(--doc-h),calc((min(1180px,94vw) - 2px) * 1.45));max-width:100%;max-height:none;
  margin-inline:auto;aspect-ratio:1/1.45;object-fit:contain;background:#d6d7d3}
/* A sideways swipe on the page turns it (certs.js); the browser keeps vertical panning and pinch zoom, and the swipe
   never chains into a back or forward navigation. */
.photo-viewer.is-doc{overscroll-behavior:contain}
.photo-viewer.is-doc figure{touch-action:pan-y pinch-zoom}

/* ---------------------------------------------------------------- embedded PDFs (owner 26 Oct 17:00; markup: tools/rdso_page.py pdf_doc, pdf_split)
   From 1024 px a PDF shows in an iframe inside a cut-corner plate, about 4:3 and at least 70vh tall (never over 900 px), with
   Open PDF and Download PDF under it. A phone cannot show a PDF inline, so below 1024 px the frame is display:none (a lazy
   iframe that is not shown never loads) and .pdf-alt stands in: the page-image viewer link where the document has one, else a
   plate with the document's name. The links show at every width. */
.pdf-doc{min-width:0}
.pdf-frame{--fill:var(--surface);display:none;width:100%;max-width:440px;min-width:0;padding:6px;height:380px}   /* owner 26 Oct 19:05: embeds smaller (was 4:3, at least 70vh up to 900 px) */   /* width and min-width stated: min-height would otherwise widen the box through the ratio */
.pdf-frame iframe{display:block;width:100%;height:100%;border:0;background:#fff}
.pdf-alt .rd-doc{margin-bottom:4px}
.pdf-plate{--fill:var(--surface);padding:16px 20px}
.pdf-plate-t{font-weight:500;color:var(--txt)}
.pdf-plate-s{margin-top:2px;color:var(--txt-3);font-size:.9rem}
.pdf-links{display:flex;flex-wrap:wrap;gap:6px 28px;margin-top:14px}
.pdf-links .link{min-height:44px;font-size:.9rem}
@media (min-width:1024px){.pdf-frame{display:block}.pdf-alt{display:none}}
/* The details on the left, the PDF on the right from 1280 px; stacked below that. */
.pdf-split{display:grid;gap:clamp(18px,2.4vw,32px);align-items:start;margin:0 0 24px}
.pdf-split-main{min-width:0}
.pdf-split-main>.rd-fields{margin-bottom:0}
@media (min-width:1280px){
  .pdf-split{grid-template-columns:minmax(0,5fr) minmax(0,6fr)}
  .pdf-split .rd-field{grid-template-columns:1fr;gap:2px}
  .rd-cert-card--pdf{grid-template-columns:minmax(0,5fr) minmax(0,6fr)}
  .rd-cert-grid--three .rd-cert-card--pdf{grid-template-columns:minmax(0,1fr)}
}
.rd-weld+.rd-weld{margin-top:clamp(24px,3vw,40px)}
.rd-weld .rd-h5{margin-bottom:12px}
.rd-welds{margin-top:24px}

/* ---------------------------------------------------------------- motion, contrast modes and print */
@media (prefers-reduced-motion:reduce){.ptab,.ptab-disc,.ptab-disc::after{transition:none}}
html.mc-paused :is(.ptab,.ptab-disc),html.mc-paused .ptab-disc::after{transition:none}
@media (forced-colors:active){
  :is(.ptab,.ptab-disc,.rd-fields,.rd-org>.rd-field,.rd-claim,.rd-quick-plate,.rd-cert-card,.pdf-frame,.pdf-plate){clip-path:none;border:1px solid CanvasText}
  .ptab-disc[aria-expanded="true"]{border-width:2px;text-decoration:underline 2px;text-underline-offset:4px}
  .ptab-disc:focus-visible{outline:2px solid Highlight;outline-offset:2px}
  .ptab[aria-selected="true"]{border-width:2px;text-decoration:underline 2px;text-underline-offset:4px}
  .ptab:focus-visible{outline:2px solid Highlight;outline-offset:2px}
  .rd-cert-card .rd-fields{border:0;border-bottom:1px solid CanvasText}
  .rd-cert-card .rd-field{border:0;border-top:1px solid CanvasText}
  .rd-claim li::before{background:CanvasText}
}
@media print{
  .ptab-list{display:none}
  .ptab-panel[hidden],.ptab-body[hidden]{display:block!important}
  .ptab-disc::after{display:none}
  .ptabs>.ptab-panel+.ptab-panel{margin-top:18px;padding-top:18px;border-top:1px solid #999}
  :is(.ptab,.rd-fields,.rd-org>.rd-field,.rd-claim,.rd-quick-plate,.rd-cert-card){clip-path:none;background:none;border:1px solid #999}
  .pdf-doc{display:none}   /* a PDF frame and its links do nothing on paper */
  .rd-fields>.rd-field+.rd-field{border-top:1px solid #ccc}
  .rd-cert-card .rd-fields{border:0;border-bottom:1px solid #ccc}
  .rd-cert-card .rd-field{border:0;border-top:1px solid #ccc}
  .rd-quick,.rd-thumb{display:none}
  /* The View and Download plates do nothing on paper (Q14 S3): one plain line in their place. */
  .rd-cert>*{display:none!important}
  .rd-cert::before{content:"A copy is on the Certifications page of this website (/certifications).";display:block;color:var(--txt-2)}
  .rd-cert-card--pdf{display:block}
}
