/* PeptidePlugs certificate database (/coas/): tools, ledger (By product / By lot), viewer, certificate pane,
   lens and full view. Loaded on the COA page only; drawn by assets/js/coa-ledger.js. Tokens and the batch card
   (.ppt-coa-card) come from theme.css. theme.css sets body.ppt button{font:inherit}, so every button here
   states its type under body.ppt. */
.ppt-cl,.ppt-cl-lens{--cl-h:max(520px,calc(100vh - 300px));--cl-cols:minmax(0,1fr) 104px 62px 122px 90px;--cl-foil:linear-gradient(135deg,#8a6a1f 0%,#e4c46a 24%,#fff5cc 40%,#d4af37 56%,#8a6a1f 74%,#e4c46a 100%)}
.ppt-cl kbd{font:700 10px var(--ppt-font-mono);padding:2px 6px;border:1px solid #cfd6df;border-bottom-width:2px;border-radius:5px;background:#fff;color:var(--ppt-text-2)}

/* tools */
.ppt-cl-tools{padding:12px 14px;display:flex;flex-direction:column;gap:10px;margin-bottom:14px}
.ppt-cl-tools-row{display:flex;gap:10px;align-items:center}
.ppt-cl-search{flex:1;display:flex;align-items:center;gap:10px;height:46px;padding:0 12px 0 14px;border:1.5px solid #cfd6df;border-radius:10px;background:#fff;color:var(--ppt-muted);transition:border-color .12s,box-shadow .12s}
.ppt-cl-search:focus-within{border-color:var(--ppt-ink);box-shadow:0 0 0 3px rgba(15,30,48,.08)}
.ppt-cl-search input{flex:1;min-width:0;border:0;outline:0;background:none;font:500 15px var(--ppt-font-body);color:var(--ppt-ink)}
.ppt-cl-count{font-size:11px;font-weight:700;color:var(--ppt-blue);white-space:nowrap}
.ppt-cl-count.is-none{color:var(--ppt-danger)}
.ppt-cl-seg{display:flex;padding:3px;border-radius:10px;background:#eef1f5;border:1px solid var(--ppt-line)}
.ppt-cl-seg button{height:38px;padding:0 14px;border:0;border-radius:7px;background:none;font:700 11.5px var(--ppt-font-mono);color:var(--ppt-text-2)}
.ppt-cl-seg button.is-on{background:var(--ppt-ink);color:#fff;box-shadow:0 2px 6px rgba(15,30,48,.25)}
.ppt-cl-chips{display:flex;gap:6px;flex-wrap:wrap}
.ppt-cl-chips button{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--ppt-line);background:#fff;font:700 11px var(--ppt-font-mono);padding:7px 11px;border-radius:8px;color:var(--ppt-ink)}
.ppt-cl-chips button:hover{border-color:var(--ppt-ink)}
.ppt-cl-chips button.is-on{background:var(--ppt-ink);color:#fff;border-color:var(--ppt-ink)}
.ppt-cl-chips button span{font-weight:500;opacity:.6;font-size:10px}
.ppt-cl-chips .is-new{border-color:#d9c27a;background:linear-gradient(180deg,#fffdf3,#fbf3d3);color:var(--ppt-gold-ink)}
.ppt-cl-chips .is-new.is-on{background:var(--cl-foil);color:var(--ppt-gold-ink);border-color:#8a6a1f}
.ppt-cl-chips i{width:1px;align-self:stretch;background:var(--ppt-line);margin:2px 4px}

/* layout */
.ppt-cl-grid{display:grid;grid-template-columns:minmax(0,1fr) 548px;gap:16px;align-items:start}
.ppt-cl-ledger{height:var(--cl-h);display:flex;flex-direction:column;overflow:hidden}
.ppt-cl-viewer{height:var(--cl-h);display:flex;flex-direction:column;gap:12px;min-width:0}

/* A–Z */
.ppt-cl-az{display:flex;align-items:center;gap:1px;padding:7px 14px;border-bottom:1px solid var(--ppt-line-2);background:#fff}
.ppt-cl-az[hidden]{display:none}
.ppt-cl-az button{flex:1;max-width:26px;height:22px;border:0;border-radius:5px;background:none;font:700 11px var(--ppt-font-mono);color:var(--ppt-ink);padding:0}
.ppt-cl-az button:hover{background:#eef1f5}
.ppt-cl-az button:disabled{color:#c5ccd6;cursor:default;background:none}
.ppt-cl-az button.is-on{background:var(--ppt-ink);color:#fff}

/* column heads */
.ppt-cl-cols,.ppt-cl-row,.ppt-cl-sub{display:grid;grid-template-columns:var(--cl-cols);gap:12px;align-items:center;padding:0 16px}
.ppt-cl-cols{height:34px;flex:none;border-bottom:1px solid var(--ppt-line);background:#f6f8fa}
.ppt-cl-cols button{all:unset;cursor:pointer;display:inline-flex;align-items:center;gap:5px;font:700 10px var(--ppt-font-mono);letter-spacing:1.4px;text-transform:uppercase;color:var(--ppt-muted)}
.ppt-cl-cols button:hover,.ppt-cl-cols button.is-on{color:var(--ppt-ink)}
.ppt-cl-cols button i{font-style:normal;font-size:9px;opacity:0}
.ppt-cl-cols button.is-on i{opacity:1}
.ppt-cl-cols .r,.ppt-cl-row .r,.ppt-cl-sub .r{justify-self:end;text-align:right}

/* rows */
.ppt-cl-scroll{flex:1;overflow-y:auto;outline:0;scrollbar-width:thin;scrollbar-color:#c3d0e0 transparent;scroll-padding:8px 0}
.ppt-cl-group{border-bottom:1px solid var(--ppt-line-2)}
.ppt-cl-row{position:relative;min-height:58px;padding-top:8px;padding-bottom:8px;cursor:pointer;font-family:var(--ppt-font-mono);font-size:12.5px;color:var(--ppt-ink)}
.ppt-cl-row:hover,.ppt-cl-sub:hover{background:#f6f8fa}
.ppt-cl-row.is-on,.ppt-cl-sub.is-on{background:linear-gradient(90deg,#e9eff7 0%,#f3f6fa 100%)}
.ppt-cl-row.is-on::before,.ppt-cl-sub.is-on::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--cl-foil)}
.ppt-cl-name{display:flex;align-items:center;gap:10px;min-width:0}
.ppt-cl-name img{width:34px;height:34px;flex:none;border-radius:8px;border:1px solid var(--ppt-line);background:#fff;object-fit:contain}
.ppt-cl-name>span{min-width:0;display:flex;flex-direction:column;gap:4px}
.ppt-cl-name b{font:600 14px/1.2 var(--ppt-font-body);color:var(--ppt-ink);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.ppt-cl-meta{font-size:10.5px;color:var(--ppt-muted);display:flex;gap:4px;flex-wrap:wrap;align-items:center;font-style:normal}
.ppt-cl-size{border:1px solid #cfd6df;background:#fff;border-radius:6px;padding:2px 7px;font:700 10.5px var(--ppt-font-mono);color:var(--ppt-ink);line-height:1.5}
.ppt-cl-size:hover{border-color:var(--ppt-ink)}
.ppt-cl-size.is-on{background:var(--ppt-ink);border-color:var(--ppt-ink);color:#fff}
.ppt-cl-size span{font-weight:500;opacity:.55;margin-left:3px}
.ppt-cl-lot{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:700}
.ppt-cl-cell2{display:flex;flex-direction:column;gap:3px;min-width:0}
.ppt-cl-cell2 small{font-size:10px;color:var(--ppt-muted);font-weight:500;white-space:nowrap}
.ppt-cl-pur{color:var(--ppt-pass);font-weight:700}
.ppt-cl-pur.is-ph{color:var(--ppt-gold-1)}
.ppt-cl-qty b{font-weight:700}.ppt-cl-qty span{color:var(--ppt-muted);font-weight:500}
.ppt-cl-date{color:var(--ppt-text-2);white-space:nowrap}
.ppt-cl-tagline{font:700 9px var(--ppt-font-mono);letter-spacing:1.2px;text-transform:uppercase}
.ppt-cl-tagline.is-ship{color:var(--ppt-gold-1)}.ppt-cl-tagline.is-next{color:var(--ppt-blue)}
.ppt-cl-hist{justify-self:end;display:inline-flex;align-items:center;gap:3px;height:28px;padding:0 7px;border:1px solid var(--ppt-line);border-radius:8px;background:#fff;font:700 11px var(--ppt-font-mono);color:var(--ppt-text-2)}
.ppt-cl-hist:hover{border-color:var(--ppt-ink);color:var(--ppt-ink)}
.ppt-cl-hist svg{transition:transform .15s}
.ppt-cl-hist[aria-expanded="true"]{background:var(--ppt-ink);border-color:var(--ppt-ink);color:#fff}
.ppt-cl-hist[aria-expanded="true"] svg{transform:rotate(180deg)}
.ppt-cl mark{background:#fde9a8;color:inherit;border-radius:3px;padding:0 1px}

/* earlier lots: an indented timeline under the row */
.ppt-cl-subs{background:#fafbfc;border-top:1px solid var(--ppt-line-2)}
.ppt-cl-sub{position:relative;height:38px;cursor:pointer;font-family:var(--ppt-font-mono);font-size:12px;color:var(--ppt-text-2)}
.ppt-cl-sub .ppt-cl-when{display:flex;align-items:center;gap:10px;padding-left:16px;position:relative;white-space:nowrap}
.ppt-cl-sub .ppt-cl-when::before{content:"";position:absolute;left:17px;top:-19px;bottom:-19px;width:1px;background:#d5dce6}
.ppt-cl-sub:first-child .ppt-cl-when::before{top:-4px}.ppt-cl-sub:last-child .ppt-cl-when::before{bottom:50%}
.ppt-cl-sub .ppt-cl-when i{position:relative;width:9px;height:9px;margin-left:-3px;margin-right:9px;border-radius:50%;background:#fff;border:2px solid #9fb0c6;flex:none}
.ppt-cl-sub.is-on .ppt-cl-when i{border-color:var(--ppt-gold-1);background:var(--ppt-gold-2)}
.ppt-cl-sub .ppt-cl-lot{font-weight:500;color:var(--ppt-ink)}
.ppt-cl-sub .ppt-cl-var{font-size:10.5px;color:var(--ppt-muted)}
.ppt-cl-sublabel{padding:7px 16px 2px 32px;font:700 9px var(--ppt-font-mono);letter-spacing:1.4px;text-transform:uppercase;color:var(--ppt-muted)}

/* by lot: flat table */
.ppt-cl-ledger.is-lot{--cl-cols:92px 112px minmax(0,1fr) 62px 122px 64px}
.ppt-cl-ledger.is-lot .ppt-cl-row{min-height:44px;padding-top:5px;padding-bottom:5px;border-bottom:1px solid var(--ppt-line-2)}
.ppt-cl-ledger.is-lot .ppt-cl-name img{width:26px;height:26px;border-radius:6px}
.ppt-cl-ledger.is-lot .ppt-cl-name b{font-size:13px;-webkit-line-clamp:1}
.ppt-cl-ledger.is-lot .ppt-cl-name em{font:500 10.5px var(--ppt-font-mono);color:var(--ppt-muted);font-style:normal;white-space:nowrap}
.ppt-cl-ledger.is-lot .ppt-cl-name>span{flex-direction:row;align-items:baseline;gap:7px}
.ppt-cl-var{font-size:11px;color:var(--ppt-text-2)}

.ppt-cl-empty{padding:44px 24px;text-align:center;font:500 12.5px/1.6 var(--ppt-font-mono);color:var(--ppt-muted)}
.ppt-cl-foot{flex:none;display:flex;gap:18px;align-items:center;height:34px;padding:0 16px;border-top:1px solid var(--ppt-line);background:#f6f8fa;font-size:10.5px;color:var(--ppt-muted)}
.ppt-cl-foot kbd{margin-right:3px}.ppt-cl-foot span:last-child{margin-left:auto}

/* viewer: the batch card, tightened so the certificate gets the height */
.ppt-cl-viewer .ppt-coa-card{flex:none;padding:16px 18px;gap:11px;border-radius:14px}
.ppt-cl-viewer .ppt-coa-card-top{font-size:10px;letter-spacing:1.6px}
.ppt-cl-viewer .ppt-coa-card-top span:last-child{text-align:right;white-space:nowrap}
.ppt-cl-viewer .ppt-coa-card-nums{gap:24px}
.ppt-cl-viewer .ppt-coa-card-nums b{font-size:32px;letter-spacing:-1px}
.ppt-cl-viewer .ppt-coa-card-nums b small{font-size:14px}
.ppt-cl-viewer .ppt-coa-card-nums span{font-size:9px;margin-top:4px}
.ppt-cl-viewer .ppt-coa-comp-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:4px}
.ppt-cl-viewer .ppt-coa-comp-grid div{padding:5px 9px;font-size:10.5px}
.ppt-cl-viewer .ppt-coa-markers{display:flex;flex-wrap:wrap;gap:5px}
.ppt-cl-viewer .ppt-coa-markers div{padding:5px 9px;font-size:10px;gap:7px;border-radius:7px}
.ppt-cl-viewer .ppt-coa-card-actions .ppt-btn{height:36px;padding:0 14px;font-size:13px}

/* certificate pane */
.ppt-cl-cert{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}
.ppt-cl-cert-bar{flex:none;display:flex;align-items:center;gap:12px;height:36px;padding:0 8px 0 14px;border-bottom:1px solid var(--ppt-line);background:#f6f8fa;font-size:10.5px;color:var(--ppt-muted)}
.ppt-cl-cert-bar>span:first-child{font-weight:700;letter-spacing:1.4px;text-transform:uppercase;color:var(--ppt-ink)}
.ppt-cl-cert-hint{margin-left:auto}
.ppt-cl-zoom{display:inline-flex;align-items:center;border:1px solid var(--ppt-line);border-radius:7px;background:#fff;overflow:hidden}
.ppt-cl-zoom button{width:26px;height:24px;border:0;background:none;font:700 14px var(--ppt-font-mono);color:var(--ppt-ink);padding:0}
.ppt-cl-zoom button:hover{background:#eef1f5}
.ppt-cl-zoom b{min-width:38px;text-align:center;font-size:10.5px;color:var(--ppt-ink)}
.ppt-cl-pages{flex:1;overflow-y:auto;background:#e9edf2;padding:10px;display:flex;flex-direction:column;gap:10px;scrollbar-width:thin;scrollbar-color:#b4c0cf transparent}
.ppt-cl-pages canvas,.ppt-cl-pages img{display:block;width:100%;height:auto;background:#fff;border-radius:4px;box-shadow:0 1px 2px rgba(15,30,48,.12),0 8px 22px -10px rgba(15,30,48,.35);cursor:zoom-in}
.ppt-cl-pages.is-lens canvas{cursor:none}
.ppt-cl-loading{margin:auto;font:500 11.5px var(--ppt-font-mono);color:var(--ppt-muted)}

/* the lens: gold foil ring, bronze edge, top highlight, lift */
.ppt-cl-lens{position:fixed;z-index:99990;left:0;top:0;width:236px;height:236px;margin:-118px 0 0 -118px;padding:4px;border-radius:22px;pointer-events:none;background:var(--cl-foil);box-shadow:0 0 0 1px #6b5216,0 1px 0 1px rgba(255,255,255,.35) inset,0 26px 50px -14px rgba(11,23,40,.6),0 6px 14px rgba(11,23,40,.3),0 0 34px rgba(228,196,106,.28);will-change:transform}
.ppt-cl-lens[hidden]{display:none}
.ppt-cl-lens canvas{display:block;width:100%;height:100%;border-radius:18px;background:#fff;box-shadow:0 0 0 1px #6b5216}
.ppt-cl-lens::after{content:"";position:absolute;inset:4px;border-radius:18px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.6),inset 0 10px 22px -12px rgba(11,23,40,.35);pointer-events:none}
.ppt-cl-lens span{position:absolute;right:12px;bottom:12px;z-index:1;font-size:10px;font-weight:700;padding:3px 7px;border-radius:999px;background:rgba(11,23,40,.86);color:#fff5cc}

/* full view */
.ppt-cl-box{position:fixed;inset:0;z-index:99995;display:flex;flex-direction:column;background:rgba(8,16,28,.94);backdrop-filter:blur(6px)}
.ppt-cl-box[hidden]{display:none}
.ppt-cl-box-bar{flex:none;display:flex;align-items:center;justify-content:space-between;gap:16px;height:56px;padding:0 18px;color:var(--ppt-mist);font-size:11px;letter-spacing:1.4px;text-transform:uppercase;border-bottom:1px solid rgba(255,255,255,.1)}
.ppt-cl-box-tools{display:flex;gap:8px;align-items:center}
.ppt-cl-box-tools button{height:36px;min-width:36px;padding:0 12px;border-radius:8px;border:1px solid rgba(255,255,255,.22);background:rgba(255,255,255,.06);color:#fff;font:700 12px var(--ppt-font-mono)}
.ppt-cl-box-tools button:hover{background:rgba(255,255,255,.16)}
.ppt-cl-box-tools .ppt-btn{height:36px;padding:0 14px;font-size:13px}
.ppt-cl-box-stage{flex:1;position:relative;overflow:hidden;cursor:grab}
.ppt-cl-box-stage.is-drag{cursor:grabbing}
.ppt-cl-box-stage canvas{position:absolute;left:0;top:0;transform-origin:0 0;background:#fff;box-shadow:0 30px 80px rgba(0,0,0,.6)}
.ppt-cl-box-hint{position:absolute;left:50%;bottom:16px;transform:translateX(-50%);font-size:10.5px;color:#fff;background:rgba(11,23,40,.8);border:1px solid rgba(255,255,255,.16);padding:6px 12px;border-radius:999px;pointer-events:none}

.ppt-cl-sublabel{padding-left:48px}
.ppt-cl-sub .ppt-cl-var{white-space:nowrap}
.ppt-cl-cols button{white-space:nowrap}
.ppt-cl-chips[hidden]{display:none}
.ppt-cl-noimg{width:34px;height:34px;flex:none;border-radius:8px;border:1px dashed var(--ppt-line);background:#f6f8fa}
.ppt-cl-ledger.is-lot .ppt-cl-noimg{width:26px;height:26px;border-radius:6px}
.ppt-cl-mlot{display:none;font-style:normal}
.ppt-cl-row:focus-visible,.ppt-cl-sub:focus-visible{outline:2px solid var(--ppt-royal);outline-offset:-2px}
.ppt-cl-viewer .ppt-coa-note{margin-top:-4px;font-size:9.5px;line-height:1.45}
.ppt-cl-pages iframe{flex:1;width:100%;min-height:520px;border:0;background:#fff;border-radius:4px}
.ppt-cl-close{display:none}
html.ppt-cl-noscroll{overflow:hidden}
.ppt-cl-box-bar>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ppt-cl-box-stage{touch-action:none}
.ppt-cl-box-tools [hidden]{display:none}

body.ppt .ppt-cl-seg button{font:700 11.5px var(--ppt-font-mono)}
body.ppt .ppt-cl-chips button{font:700 11px var(--ppt-font-mono)}
body.ppt .ppt-cl-az button{font:700 11px var(--ppt-font-mono)}
body.ppt .ppt-cl-cols button{font:700 10px var(--ppt-font-mono)}
body.ppt .ppt-cl-size{font:700 10.5px/1.5 var(--ppt-font-mono)}
body.ppt .ppt-cl-hist{font:700 11px var(--ppt-font-mono)}
body.ppt .ppt-cl-zoom button{font:700 14px var(--ppt-font-mono)}
body.ppt .ppt-cl-box-tools button{font:700 12px var(--ppt-font-mono)}
body.ppt .ppt-cl-close{font:700 12px var(--ppt-font-mono)}

@media (max-width:1180px){
  .ppt-cl-grid{grid-template-columns:minmax(0,1fr) 440px}
  .ppt-cl{--cl-cols:minmax(0,1fr) 100px 60px 116px}
  .ppt-cl-ledger:not(.is-lot) .ppt-cl-date,.ppt-cl-ledger:not(.is-lot) .ppt-cl-cols>:nth-child(5),.ppt-cl-ledger:not(.is-lot) .ppt-cl-sub>.ppt-cl-var{display:none}
  .ppt-cl-ledger.is-lot{--cl-cols:92px 104px minmax(0,1fr) 60px 64px}
  .ppt-cl-ledger.is-lot .ppt-cl-qty,.ppt-cl-ledger.is-lot .ppt-cl-cols>:nth-child(5){display:none}
}
/* phone: the list is the page; a tap swaps it for the viewer (card + certificate), Back returns to the row */
@media (max-width:900px){
  .ppt-cl-tools-row{flex-wrap:wrap}
  .ppt-cl-search{flex:1 1 100%}.ppt-cl-search kbd{display:none}
  .ppt-cl-seg{flex:1}.ppt-cl-seg button{flex:1}
  .ppt-cl-chips{flex-wrap:nowrap;overflow-x:auto;margin:0 -14px;padding:0 14px 2px;scrollbar-width:none}
  .ppt-cl-chips::-webkit-scrollbar{display:none}
  .ppt-cl-chips button{flex:none}
  .ppt-cl-grid{grid-template-columns:1fr}
  .ppt-cl-ledger{height:auto;overflow:visible}
  .ppt-cl-scroll{overflow:visible}
  .ppt-cl-az,.ppt-cl-cols,.ppt-cl-foot,.ppt-cl-zoom{display:none}
  .ppt-cl,.ppt-cl-ledger.is-lot{--cl-cols:minmax(0,1fr) auto}
  .ppt-cl-row,.ppt-cl-sub{padding-left:12px;padding-right:12px;gap:10px}
  .ppt-cl-row>.ppt-cl-lotc,.ppt-cl-row>.ppt-cl-date,.ppt-cl-row>.ppt-cl-qty,.ppt-cl-row>.ppt-cl-var,.ppt-cl-sub>.ppt-cl-qty,.ppt-cl-sub>.ppt-cl-var{display:none}
  .ppt-cl-ledger.is-lot .ppt-cl-row{grid-template-columns:minmax(0,1fr) auto}
  .ppt-cl-ledger.is-lot .ppt-cl-name>span{flex-direction:column;align-items:flex-start;gap:3px}
  .ppt-cl-ledger.is-lot .ppt-cl-name b{-webkit-line-clamp:2}
  .ppt-cl-mlot{display:block;font-size:10.5px;color:var(--ppt-muted)}
  .ppt-cl-sub{grid-template-columns:minmax(0,1fr) auto auto;height:auto;min-height:40px}
  .ppt-cl-sublabel{padding-left:44px}
  .ppt-cl-size{padding:4px 9px}
  .ppt-cl-viewer{display:none;height:auto}
  .ppt-coas.is-cl-viewing .ppt-cl-tools,.ppt-coas.is-cl-viewing .ppt-cl-ledger{display:none}
  .ppt-coas.is-cl-viewing .ppt-cl-viewer{display:flex}
  .ppt-cl-cert{flex:none;overflow:visible}
  .ppt-cl-pages{overflow:visible;padding:8px}
  .ppt-cl-pages iframe{height:70vh}
  .ppt-cl-close{display:inline-flex}
  .ppt-cl-viewer .ppt-coa-card-top{flex-direction:column;gap:4px}
  .ppt-cl-viewer .ppt-coa-card-top span:last-child{text-align:left;white-space:normal}
  .ppt-cl-box-bar{height:52px;padding:0 10px;gap:8px}
  .ppt-cl-box-tools [data-b-z]{display:none}
}
.ppt-cl-viewer .ppt-coa-card-top{flex-wrap:wrap;row-gap:3px}
.ppt-cl-viewer .ppt-coa-card-top span:first-child{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.ppt-cl-box-hint{white-space:nowrap}
.ppt-cl-box-tools button{white-space:nowrap}
