/* ============================================================
   buy_log.components.css · สมุดซื้อทุเรียน (consolidator / ล้ง buy log)
   ------------------------------------------------------------
   The buy-SIDE operations book — the mirror job of the grower's
   sale log, but a different persona: `density:"dense"` (desk tempo,
   many rows, fast scanning), NOT the calm grower voice.

   EXTENDS the shipped Atlas language + the Sourcing Desk + Trade
   Actions layer. Every value resolves to a supply.tokens.css
   variable — NO new colour / font / radius / shadow / provenance
   hue is minted. Zero-dependency, greyscale-safe (glyph + edge +
   weight + position, never hue alone).

   Loaded LAST, after:
     fonts.css → supply.tokens.css → supply.components.css →
     shell.chrome.css → sourcing.components.css → trade.components.css

   REUSES verbatim (no restyle): the shell + workbench (.shell/.wb/
   .wbbody/.wbsec), the dense ledger (.ledger), the deal machinery
   (.ordercard, .oc- , .turnchip, .lifeline, .lstep — the 3 buy steps
   map straight onto it), status chips (.stchip.agreed/.delivered/
   .settled), the drawer + form grammar (.drawer, .dr- , .offerfield,
   .fieldgrid, .segfield, .filterbar), states (.statebox/.skelcard/
   .stalebar), buttons (.btn), the provenance ladder (.pv), .band/.metric.

   MINTS new (bl-*) ONLY the things with no shipped analogue:
     · the day/week own-book summary strip (cost, tonnes, grade split)
       + the ONE honest external benchmark (official wholesale ref)
     · the fast truck-in entry (big mono weight×price + the per-grade
       packout grid) — the "faster than paper" make-or-break
     · the balance-owed emphasis + the deposit/settle toggle
     · the private seller note (symmetric to the grower's buyer note)
     · the ทุเรียนอ่อน (immature-fruit) dispute flag
   ============================================================ */

/* the [hidden] attribute must win over component display:flex/grid */
[hidden]{ display:none !important; }

/* the buy-log body is a single dense column that widens on desktop;
   mobile-first (recorded in a shed, one-handed, mid-day glare). */
.bl-wrap{ width:min(760px,100%); margin:0 auto; display:flex; flex-direction:column; gap:var(--s4); }

/* ============================================================
   DAY / WEEK SUMMARY — the ล้ง's OWN book, never an aggregate of
   anyone else. Honest-data: every figure states the period and how
   many loads it was computed from. The ONLY external number is the
   pre-existing PUBLIC official wholesale reference (◆ + source + date)
   — NEVER a farm-gate figure derived from growers' slips (VALUES §5).
   ============================================================ */
.bl-daysum{ border:1px solid var(--line); border-radius:var(--r-lg); background:var(--surface);
  box-shadow:var(--sh-sm); overflow:hidden; }
.bl-dshd{ display:flex; align-items:center; gap:var(--s3); flex-wrap:wrap;
  padding:var(--s3) var(--s4); background:var(--surface2); border-bottom:1px solid var(--line); }
.bl-dshd .ttl{ font-size:var(--fs-sm); font-weight:var(--fw-bold); color:var(--ink); letter-spacing:-.01em; }
.bl-dshd .grow{ flex:1; }
/* the private/own-book tag — this is the ล้ง's book, nobody else's */
.bl-selftag{ display:inline-flex; align-items:center; gap:.35rem; white-space:nowrap;
  font-size:var(--fs-2xs); font-weight:var(--fw-bold); line-height:1.5; padding:.12rem .55rem;
  border-radius:var(--r-pill); background:var(--pv-private-bg); color:var(--pv-private); border:1px solid var(--pv-private-ln); }
.bl-selftag .g{ font-weight:var(--fw-x); }
/* วันนี้ / สัปดาห์ toggle reuses .segfield tempo but sits inline in the head */
.bl-dshd .segfield{ min-height:0; }
.bl-dshd .segfield button{ min-height:32px; padding:.3rem .7rem; font-size:var(--fs-xs); }

.bl-dsgrid{ display:grid; grid-template-columns:repeat(4,1fr); }
.bl-dsfig{ padding:var(--s4); border-left:1px solid var(--line); }
.bl-dsfig:first-child{ border-left:0; }
.bl-dsfig .k{ font-size:var(--fs-2xs); text-transform:uppercase; letter-spacing:.05em; color:var(--muted); font-weight:var(--fw-bold); }
.bl-dsfig .v{ font-family:var(--mono); font-variant-numeric:tabular-nums; font-size:1.4rem; font-weight:var(--fw-bold);
  color:var(--ink); margin-top:.15rem; line-height:1.05; letter-spacing:-.01em; }
.bl-dsfig .v .u{ font-family:var(--font); font-size:var(--fs-2xs); color:var(--muted); font-weight:var(--fw-semi); margin-left:.2rem; }
.bl-dsfig .v .tilde{ color:var(--pv-est); }
.bl-dsfig.spend .v{ color:var(--brand-ink); }
@media (max-width:560px){
  .bl-dsgrid{ grid-template-columns:1fr 1fr; }
  .bl-dsfig:nth-child(-n+2){ border-top:0; }
  .bl-dsfig:nth-child(2n+1){ border-left:0; }
  .bl-dsfig:nth-child(n+3){ border-top:1px solid var(--line); }
}

/* the honest caption: N loads + the window it covers (canon #3) */
.bl-dscap{ display:flex; align-items:center; gap:.4rem; flex-wrap:wrap; padding:.55rem var(--s4);
  border-top:1px solid var(--line); font-size:var(--fs-2xs); color:var(--muted); font-family:var(--mono); }
.bl-dscap .num{ color:var(--ink2); font-weight:var(--fw-bold); }

/* grade split — bars built ONLY from this ล้ง's own logged loads */
.bl-split{ padding:var(--s3) var(--s4) var(--s4); border-top:1px solid var(--line); display:flex; flex-direction:column; gap:.5rem; }
.bl-split .sh{ font-size:var(--fs-2xs); text-transform:uppercase; letter-spacing:.05em; color:var(--muted); font-weight:var(--fw-bold); }
.bl-splitbar{ display:flex; height:22px; border-radius:var(--r-sm); overflow:hidden; border:1px solid var(--line2); background:var(--surface2); }
.bl-splitbar i{ display:flex; align-items:center; justify-content:center; font-family:var(--mono); font-size:var(--fs-2xs);
  font-weight:var(--fw-bold); color:var(--ink); white-space:nowrap; overflow:hidden; min-width:0; border-right:1px solid var(--surface); }
.bl-splitbar i:last-child{ border-right:0; }
.bl-splitbar i.g-ab{ background:var(--ramp-3); }
.bl-splitbar i.g-c{ background:var(--ramp-1); color:var(--ink2); }
.bl-splitbar i.g-mix{ background:var(--brand-soft); color:var(--brand-ink); }
.bl-splitlgd{ display:flex; gap:var(--s4); flex-wrap:wrap; font-size:var(--fs-2xs); color:var(--muted); }
.bl-splitlgd b{ display:inline-flex; align-items:center; gap:.35rem; color:var(--ink2); font-weight:var(--fw-semi); }
.bl-splitlgd .sw{ width:11px; height:11px; border-radius:3px; flex:0 0 11px; border:1px solid var(--line2); }
.bl-splitlgd .sw.g-ab{ background:var(--ramp-3); } .bl-splitlgd .sw.g-c{ background:var(--ramp-1); } .bl-splitlgd .sw.g-mix{ background:var(--brand-soft); }

/* the ONE external benchmark: official wholesale reference. ◆ official,
   carries source + date. Explicitly NOT a farm-gate number. */
.bl-ref{ display:flex; align-items:flex-start; gap:.6rem; padding:.7rem var(--s4);
  border-top:1px solid var(--line); background:var(--pv-official-bg); }
.bl-ref .ic{ color:var(--pv-official); font-weight:var(--fw-x); font-family:var(--mono); flex:0 0 auto; margin-top:1px; }
.bl-ref .rm{ flex:1; min-width:0; font-size:var(--fs-xs); color:var(--ink2); line-height:1.5; }
.bl-ref .rm b{ color:var(--pv-official); font-weight:var(--fw-bold); font-family:var(--mono); font-variant-numeric:tabular-nums; }
.bl-ref .rm .src{ color:var(--muted); }

/* ============================================================
   PRIMARY ACTIONS — the big "log a truck" CTA (make-or-break entry)
   + a secondary "record a deposit" (lock a lot before harvest).
   ============================================================ */
.bl-actions{ display:flex; gap:var(--s3); flex-wrap:wrap; }
.bl-log{ flex:1 1 auto; display:flex; align-items:center; gap:.8rem; cursor:pointer; font:inherit; text-align:left;
  border:1px solid var(--brand); border-radius:var(--r-lg); background:var(--brand-fill); color:var(--brand-fill-ink);
  padding:var(--s4) var(--s5); box-shadow:var(--sh-sm); transition:background .14s, box-shadow .14s, transform .05s; min-width:220px; }
.bl-log:hover{ background:var(--brand-fill-hov); box-shadow:var(--sh-md); }
.bl-log:active{ transform:translateY(1px); }
.bl-log:focus-visible{ outline:2px solid var(--ring); outline-offset:2px; }
.bl-log .ic{ width:34px; height:34px; flex:0 0 34px; display:grid; place-items:center; border-radius:9px; background:rgba(255,255,255,.16); }
.bl-log .ic svg{ width:22px; height:22px; display:block; }
.bl-log .am{ flex:1; min-width:0; }
.bl-log .am b{ display:block; font-size:var(--fs-lg); font-weight:var(--fw-bold); letter-spacing:-.01em; }
.bl-log .am span{ display:block; font-size:var(--fs-2xs); opacity:.86; margin-top:1px; }
.bl-log .ar{ font-size:1.3rem; opacity:.9; }
.bl-deposit{ flex:0 0 auto; }

/* resume-draft banner (half-finished load saved) — never lose work */
.bl-draft{ display:flex; align-items:center; gap:.7rem; width:100%; cursor:pointer; font:inherit; text-align:left;
  border:1.5px dashed var(--pv-est-ln); border-radius:var(--r); background:var(--pv-est-bg); color:var(--ink2); padding:.7rem .9rem; }
.bl-draft:hover{ border-color:var(--pv-est); }
.bl-draft .ic{ width:20px; height:20px; flex:0 0 20px; color:var(--pv-est); display:inline-flex; }
.bl-draft .ic svg{ width:100%; height:100%; display:block; }
.bl-draft .dm{ flex:1; min-width:0; }
.bl-draft .dm b{ font-size:var(--fs-sm); color:var(--ink); font-weight:var(--fw-bold); }
.bl-draft .dm span{ display:block; font-size:var(--fs-2xs); color:var(--muted); margin-top:1px; }
.bl-draft .ar{ color:var(--pv-est); font-weight:var(--fw-bold); }

/* offline banner — a shed has no signal; save on-device, sync later */
.bl-offline{ display:flex; align-items:center; gap:.6rem; border:1px solid var(--pv-stale-ln);
  background:var(--pv-stale-bg); border-radius:var(--r); padding:.6rem .8rem; font-size:var(--fs-xs); color:var(--ink2); line-height:1.45; }
.bl-offline .ic{ width:18px; height:18px; flex:0 0 18px; color:var(--pv-stale); display:inline-flex; }
.bl-offline .ic svg{ width:100%; height:100%; display:block; }
.bl-offline b{ color:var(--ink); font-weight:var(--fw-semi); }
.bl-offline .num{ font-family:var(--mono); font-weight:var(--fw-bold); color:var(--ink); }

/* ============================================================
   OUTSTANDING TRACKER — THE HEART. "which step is outstanding, with
   whom, for how much." Reuses .ordercard + .lifeline (the who-acts-next
   state machine) with the THREE buy steps: มัดจำ → ชั่ง/คัดเกรด → เคลียร์ยอด.
   New here: the balance-owed emphasis + the mode chip.
   ============================================================ */
.bl-outlist{ display:flex; flex-direction:column; gap:var(--s3); }

/* mode chip: เหมา (lump) vs คัดเกรด (per-grade) — a neutral locator, not a score */
.bl-mode{ display:inline-flex; align-items:center; gap:.3rem; white-space:nowrap; font-size:var(--fs-2xs);
  font-weight:var(--fw-bold); line-height:1.5; padding:.1rem .5rem; border-radius:var(--r-pill);
  background:var(--surface2); color:var(--ink2); border:1px solid var(--line2); }
.bl-mode .g{ font-family:var(--mono); font-weight:var(--fw-x); color:var(--brand2); }

/* the balance-owed figure — the single most important number on a lot.
   Big mono, brass-ink; a "paid so far" sub-line keeps it honest. */
.bl-owe{ display:flex; flex-direction:column; align-items:flex-end; text-align:right; }
.bl-owe .lbl{ font-size:var(--fs-2xs); text-transform:uppercase; letter-spacing:.05em; color:var(--muted); font-weight:var(--fw-bold); }
.bl-owe .v{ font-family:var(--mono); font-variant-numeric:tabular-nums; font-size:1.35rem; font-weight:var(--fw-bold);
  color:var(--brand-ink); line-height:1; letter-spacing:-.01em; }
.bl-owe .v .u{ font-family:var(--font); font-size:var(--fs-2xs); color:var(--muted); font-weight:var(--fw-semi); margin-left:.15rem; }
.bl-owe .paid{ font-size:var(--fs-2xs); color:var(--muted); font-family:var(--mono); margin-top:2px; }
.bl-owe.clear .v{ color:var(--pv-verified); }

/* a tiny facts row inside the order card (weight · grades · deposit) */
.bl-lotfacts{ display:flex; flex-wrap:wrap; gap:.3rem var(--s4); padding:0 var(--s4) var(--s3); }
.bl-lotfacts .f{ font-size:var(--fs-xs); color:var(--muted); }
.bl-lotfacts .f .num{ font-family:var(--mono); font-variant-numeric:tabular-nums; color:var(--ink2); font-weight:var(--fw-semi); }

/* ทุเรียนอ่อน / dispute flag on a lot — the #1 packout dispute (domain).
   greyscale-safe: warn glyph + word + dashed edge, not colour alone. */
.bl-younflag{ display:flex; align-items:center; gap:.5rem; padding:.5rem var(--s4);
  background:var(--warn-bg); border-top:1px dashed var(--warn); color:var(--warn);
  font-size:var(--fs-xs); font-weight:var(--fw-semi); }
.bl-younflag .ic{ font-weight:var(--fw-x); }

/* ============================================================
   FAST TRUCK-IN ENTRY — the make-or-break. Mode toggle first (it
   changes the whole form), then the shortest path to a saved load.
   เหมา = one weight + one price (2 keypad fields). คัดเกรด = the
   per-grade packout grid. Everything else optional/inferred.
   ============================================================ */
/* the mode toggle sits at the very top of the drawer body */
.bl-modepick{ display:flex; gap:var(--s3); align-items:center; }
.bl-modepick .segfield{ flex:1; }
.bl-modepick .segfield button{ flex:1; }

/* big mono amount field (เหมา: total price · shared shell for the keypad look) */
.bl-amount{ border:1px solid var(--brand); border-radius:var(--r-lg); background:var(--surface); box-shadow:var(--sh-sm);
  padding:var(--s3) var(--s4) var(--s4); }
.bl-amount .lbl{ display:flex; align-items:center; gap:.4rem; font-size:var(--fs-sm); font-weight:var(--fw-bold); color:var(--ink); }
.bl-amount .lbl .fr-req{ color:var(--bad); }
.bl-amrow{ display:flex; align-items:baseline; gap:.5rem; margin-top:.4rem; }
.bl-aminput{ flex:1; min-width:0; width:100%; font-family:var(--mono); font-variant-numeric:tabular-nums;
  font-size:2.6rem; font-weight:var(--fw-bold); letter-spacing:-.02em; color:var(--ink); line-height:1; border:0; background:transparent; padding:0; }
.bl-aminput::placeholder{ color:var(--line2); }
.bl-aminput:focus-visible{ outline:none; }
.bl-amunit{ font-size:var(--fs-md); color:var(--muted); font-weight:var(--fw-semi); white-space:nowrap; flex:0 0 auto; }
.bl-amrule{ height:2px; background:var(--brand); border-radius:2px; margin-top:.3rem; }
/* the two lump inputs sit side by side; live-computed ฿/kg reads back */
.bl-lumpgrid{ display:grid; grid-template-columns:1fr 1fr; gap:var(--s3); }
.bl-calc{ display:flex; align-items:center; gap:.4rem; margin-top:.6rem; font-size:var(--fs-xs); color:var(--muted); }
.bl-calc .v{ font-family:var(--mono); font-variant-numeric:tabular-nums; font-size:var(--fs-md); font-weight:var(--fw-bold); color:var(--brand-ink); }

/* ---- the per-grade packout grid (คัดเกรด) ----
   real lots are MIXED grades; grade is settled here, on-site, not at
   listing. Each row: grade · น้ำหนัก (kg) · ราคา/กก → line total. Auto-sum. */
.bl-gradegrid{ border:1px solid var(--line); border-radius:var(--r); overflow:hidden; background:var(--surface); }
.bl-gradehd, .bl-graderow{ display:grid; grid-template-columns:1.1fr 1fr 1fr auto; gap:var(--s2); align-items:center; padding:.5rem var(--s3); }
.bl-gradehd{ background:var(--surface2); border-bottom:1px solid var(--line); font-size:var(--fs-2xs);
  text-transform:uppercase; letter-spacing:.05em; color:var(--muted); font-weight:var(--fw-bold); }
.bl-graderow{ border-top:1px solid var(--line); }
.bl-graderow:first-of-type{ border-top:0; }
.bl-graderow select, .bl-graderow input{ font:inherit; font-size:var(--fs-sm); color:var(--ink); background:var(--surface2);
  border:1px solid var(--line2); border-radius:var(--r-sm); padding:.4rem .5rem; min-width:0; width:100%; min-height:40px; }
.bl-graderow input{ font-family:var(--mono); font-variant-numeric:tabular-nums; text-align:right; }
.bl-graderow input:focus-visible, .bl-graderow select:focus-visible{ outline:2px solid var(--ring); outline-offset:1px; }
.bl-graderow .rmrow{ border:0; background:transparent; color:var(--muted); cursor:pointer; font-size:1.1rem; line-height:1; padding:.2rem .3rem; border-radius:6px; }
.bl-graderow .rmrow:hover{ color:var(--bad); background:var(--bad-bg); }
.bl-gradeadd{ display:flex; align-items:center; gap:.4rem; width:100%; border:0; border-top:1px solid var(--line);
  background:var(--surface2); color:var(--brand2); cursor:pointer; font:inherit; font-size:var(--fs-sm); font-weight:var(--fw-semi); padding:.55rem var(--s3); }
.bl-gradeadd:hover{ background:var(--brand-soft); color:var(--brand-ink); }
.bl-gradetot{ display:flex; align-items:baseline; justify-content:space-between; gap:var(--s3); padding:.6rem var(--s3);
  border-top:1px solid var(--line); background:var(--surface2); }
.bl-gradetot .k{ font-size:var(--fs-xs); color:var(--muted); font-weight:var(--fw-semi); }
.bl-gradetot .k .num{ font-family:var(--mono); color:var(--ink2); font-weight:var(--fw-bold); }
.bl-gradetot .v{ font-family:var(--mono); font-variant-numeric:tabular-nums; font-size:1.3rem; font-weight:var(--fw-bold); color:var(--ink); }
.bl-gradetot .v .u{ font-family:var(--font); font-size:var(--fs-2xs); color:var(--muted); font-weight:var(--fw-semi); }
@media (max-width:440px){
  .bl-gradehd{ display:none; }
  .bl-graderow{ grid-template-columns:1fr 1fr; gap:.3rem var(--s2); padding:.6rem var(--s3); }
  .bl-graderow select{ grid-column:1 / -1; }
  .bl-graderow .rmrow{ position:absolute; }
}

/* the seller (ผู้ขาย) private note — SYMMETRIC to the grower's buyer note.
   Third-party PII: stays in the ล้ง's private store, never an aggregate,
   never seeds a directory. Same rule both directions (VALUES §5 Q2). */
.bl-privnote{ display:flex; gap:.5rem; align-items:flex-start; background:var(--pv-private-bg);
  border:1px solid var(--pv-private-ln); border-radius:var(--r-sm); padding:.5rem .6rem;
  font-size:var(--fs-2xs); color:var(--ink2); line-height:1.45; margin-top:.3rem; }
.bl-privnote .ic{ width:14px; height:14px; flex:0 0 14px; color:var(--pv-private); margin-top:1px; display:inline-flex; }
.bl-privnote .ic svg{ width:100%; height:100%; display:block; }
.bl-privnote b{ color:var(--pv-private); font-weight:var(--fw-bold); }

/* the settle toggle: ครบ (paid in full → today's ledger) vs
   ค้างไว้ (leaves a balance → outstanding tracker). Reuses .segfield. */
.bl-settle{ display:flex; flex-direction:column; gap:.4rem; }
.bl-settle .sh{ display:flex; align-items:center; gap:.4rem; font-size:var(--fs-sm); font-weight:var(--fw-semi); color:var(--ink); }
.bl-settlein{ display:grid; grid-template-columns:1fr 1fr; gap:var(--s3); }

/* ทุเรียนอ่อน flag checkbox inside the entry (domain: #1 dispute) */
.bl-flag{ display:flex; align-items:flex-start; gap:.6rem; border:1px dashed var(--line2); border-radius:var(--r);
  background:var(--surface2); padding:.6rem .7rem; cursor:pointer; }
.bl-flag input{ width:20px; height:20px; flex:0 0 20px; margin-top:1px; accent-color:var(--warn); }
.bl-flag .fm b{ display:block; font-size:var(--fs-sm); color:var(--ink); font-weight:var(--fw-semi); }
.bl-flag .fm span{ display:block; font-size:var(--fs-2xs); color:var(--muted); margin-top:1px; line-height:1.4; }
.bl-flag.on{ border-style:solid; border-color:var(--warn); background:var(--warn-bg); }

/* ============================================================
   TODAY'S LOADS — the dense ledger of settled loads. Reuses .ledger;
   adds a 5-col grid + a mono time cell. Mobile reflows to labelled
   2-col (the .moat ledger idiom).
   ============================================================ */
.bl-loads .ledger .lr{ grid-template-columns:auto 1.3fr .8fr 1fr 1fr auto; }
.bl-loads .ledger .lr .tm{ font-family:var(--mono); font-variant-numeric:tabular-nums; color:var(--muted); font-size:var(--fs-xs); }
.bl-loads .ledger .lr .seller{ display:flex; align-items:center; gap:.35rem; min-width:0; }
.bl-loads .ledger .lr .seller .nm{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.bl-loads .ledger .lr .seller .g{ color:var(--pv-private); font-weight:var(--fw-x); flex:0 0 auto; }
.bl-loads .ledger .lr .cost .num{ font-weight:var(--fw-bold); color:var(--ink); }
.bl-loads .ledger .lr.tap{ cursor:pointer; }
.bl-loads .ledger .lr.tap:hover{ background:var(--surface2); }
.bl-loads .ledger .lr .go{ color:var(--muted); font-size:1.1rem; }
.bl-loads .ledger .lr.tap:hover .go{ color:var(--brand2); }
@media (max-width:640px){
  .bl-loads .ledger .lr{ grid-template-columns:1fr 1fr; gap:.3rem var(--s3); padding:.7rem var(--s4); position:relative; }
  .bl-loads .ledger .lr:first-child{ display:none; }
  .bl-loads .ledger .lr > span::before{ content:attr(data-k); display:block; font-size:var(--fs-2xs);
    text-transform:uppercase; letter-spacing:.05em; color:var(--muted); font-weight:var(--fw-bold); }
  .bl-loads .ledger .lr .go{ position:absolute; right:var(--s4); top:.7rem; }
}

/* detail-drawer hero figure (a logged load / lot) */
.bl-detbig{ display:flex; align-items:baseline; gap:.5rem; }
.bl-detbig .p{ font-family:var(--mono); font-variant-numeric:tabular-nums; font-size:2.2rem; font-weight:var(--fw-bold);
  color:var(--ink); letter-spacing:-.02em; line-height:1; }
.bl-detbig .u{ font-size:var(--fs-sm); color:var(--muted); font-weight:var(--fw-semi); }

/* saving spinner (optimistic) */
.bl-saving{ display:inline-flex; align-items:center; gap:.45rem; color:var(--muted); font-size:var(--fs-sm); font-weight:var(--fw-semi); }
.bl-saving .sp{ width:15px; height:15px; border-radius:50%; border:2px solid var(--line2); border-top-color:var(--brand); animation:bl-spin .7s linear infinite; }
@keyframes bl-spin{ to{ transform:rotate(360deg); } }
@media (prefers-reduced-motion:reduce){ .bl-saving .sp{ animation:none; } }

@media (pointer:coarse){
  .bl-log, .bl-draft, .bl-flag, .bl-gradeadd, .bl-loads .ledger .lr.tap{ min-height:44px; }
}
