/* =============================================================================
   Jetsy — the business board.
   Loaded after app.css and reuses its tokens (--or, --ink, --line, --mono …),
   so the board looks like the rest of the app rather than a bolted-on page.

   Two rules run through all of it, both learned the hard way on a real phone:

     Every tappable thing is at least 44px high. A tick box you miss twice is
     a tick box that stops getting ticked, and the whole daily habit card
     depends on being tapped in a hurry.

     Nothing may set the page's minimum width. A single nowrap on a long line
     silently makes the entire document scroll sideways at 320px, and it is
     never obvious which element did it — so long text wraps, and anything
     that genuinely cannot (a table of months) scrolls inside its own box.
   ============================================================================= */

/* ------------------------------------------------------------------ card -- */
/* look round, 26 Sep 2026 — builder A. The console language the drawer's
   tiles already speak (see .lx-* below), on every card: the navy ground lit
   from above, an inset hairline, the cut corner on the diagonal, and the
   orange corner brackets. The tokens (--console, --cut, --bracket, --hair …)
   are defined in app.css :root. Hierarchy: a CARD gets the brackets; a ROW
   inside a card gets the hairline and the softer chamfer; a BUTTON gets the
   small chamfer. */
.bc{position:relative;background:var(--console-dk) linear-gradient(180deg,var(--console-lit) 0,var(--console-dk) 200px) no-repeat;
    box-shadow:var(--hair);
    border-radius:var(--cut);margin:.75rem 0;overflow:hidden;min-width:0}
.bc::before,.bc::after{content:"";position:absolute;width:9px;height:9px;
    border:1px solid var(--bracket);pointer-events:none;z-index:1}
.bc::before{top:5px;left:5px;border-right:0;border-bottom:0}
.bc::after{bottom:5px;right:5px;border-left:0;border-top:0}
.bc-hd{display:flex;align-items:baseline;gap:.55rem;flex-wrap:wrap;
       padding:.9rem .95rem .5rem}
.bc-hd h2{font-size:1rem;letter-spacing:-.01em;margin:0}
.bc-hd .sub{font-family:var(--mono);font-size:.6rem;letter-spacing:.13em;
            text-transform:uppercase;color:var(--muted);margin-left:auto}
.bc-bd{padding:0 .95rem 1rem;min-width:0}
.bc.pin{box-shadow:inset 0 0 0 1px rgba(255,106,26,.32)}
.bc.pin::before,.bc.pin::after{border-color:var(--or)}

.bnote{font-size:.82rem;color:var(--ink2);line-height:1.5;margin:.6rem 0 0}
.bnote.good{color:var(--ok)} .bnote.watch{color:var(--warn)} .bnote.crit{color:var(--hot)}
.bempty{font-size:.85rem;color:var(--muted);line-height:1.55;padding:.7rem 0}
.bconflict{background:rgba(255,194,77,.12);box-shadow:inset 0 0 0 1px rgba(255,194,77,.35);
           border-radius:var(--cut-row);padding:.75rem .85rem;font-size:.84rem;color:var(--ink2);
           line-height:1.5;margin:.8rem 0}

/* ---------------------------------------------------------------- inputs -- */
/* a navy inset with the small chamfer; focus is an orange ring */
.bc input[type=text],.bc input[type=search],.bc input[type=password],.bc input[type=tel],.bc input[type=email],.bc input[type=number],
.bc input[type=date],.bc input[type=time],.bc input[type=url],.bc input[type=datetime-local],.bc select,.bc textarea{
  width:100%;min-width:0;min-height:44px;background:var(--deep);color:var(--ink);
  border:0;box-shadow:var(--hair);border-radius:var(--cut-sm);
  padding:.55rem .65rem;font:inherit;font-size:.88rem;color-scheme:dark}
.bc textarea{min-height:66px;resize:vertical;line-height:1.45}
.bc input:focus,.bc select:focus,.bc textarea:focus{outline:0;
  box-shadow:inset 0 0 0 1px var(--or),0 0 0 3px rgba(255,106,26,.18)}
.bc input::placeholder,.bc textarea::placeholder{color:var(--muted)}
.bc input.nw{max-width:6.5rem}
.brow{display:flex;gap:.4rem;align-items:center;flex-wrap:wrap;margin-top:.55rem;min-width:0}
.brow>input,.brow>select{flex:1 1 8rem}
.jf{margin-top:.55rem;min-width:0}
.jf label{display:block;font-family:var(--mono);font-size:.58rem;letter-spacing:.13em;
          text-transform:uppercase;color:var(--muted);margin-bottom:.22rem}
.jf2{display:grid;grid-template-columns:1fr 1fr;gap:.4rem;min-width:0}
.jf2>.jf{margin-top:.55rem}
.bdet{margin-top:.8rem}
/* A summary that is only small grey capitals reads as a heading nobody can
   press. The chevron and the box are what say "this opens". */
.bdet summary{font-size:.76rem;color:var(--ink2);cursor:pointer;min-height:44px;
              display:flex;align-items:center;gap:.4rem;list-style:none;
              background:var(--panel2);box-shadow:var(--hair);
              border-radius:var(--cut-row);padding:0 .65rem;margin-top:.3rem}
.bdet summary::-webkit-details-marker{display:none}
.bdet summary::before{content:"›";font-size:1.1rem;line-height:1;color:var(--or);
                      transition:transform .15s;display:inline-block}
.bdet[open] summary::before{transform:rotate(90deg)}
.b.danger{color:var(--hot)}
.b.danger:hover{box-shadow:inset 0 0 0 1px var(--hot)}

/* ------------------------------------------------------------- attention -- */
/* rows inside the card: the panel ground, the softer chamfer, and the
   status colour on the hairline and the title only */
.att{display:flex;flex-direction:column;gap:.5rem;margin-top:.5rem}
.at{border-radius:var(--cut-row);padding:.7rem .75rem;display:flex;flex-direction:column;gap:.3rem;
    background:linear-gradient(180deg,rgba(255,194,77,.07),transparent 60%),var(--panel2);
    box-shadow:inset 0 0 0 1px rgba(255,194,77,.28)}
.at.crit{background:linear-gradient(180deg,rgba(255,107,94,.08),transparent 60%),var(--panel2);
         box-shadow:inset 0 0 0 1px rgba(255,107,94,.34)}
.at-t{font-size:.95rem;font-weight:600;line-height:1.35}
.at-d{font-size:.82rem;color:var(--ink2);line-height:1.5}
.at .b{align-self:flex-start;margin-top:.15rem}

/* ------------------------------------------------------------ day ticks -- */
/*
   A wrapping grid, not a sideways scroller.

   These were a horizontal strip, which is fine for four ticks and wrong for
   six: the last two sat off the right edge with nothing to say so, and a tick
   you cannot see is a tick that does not get ticked — which is the whole point
   of the card. Wrapping costs one row of height and shows everything.

   auto-fill with a 4.8rem floor lands four to a row on a phone and more on
   anything wider, without a media query.
*/
.dstrip{display:grid;grid-template-columns:repeat(auto-fill,minmax(4.8rem,1fr));
        gap:.4rem;padding:.5rem 0 .3rem}
.dt{min-width:0;min-height:56px;cursor:pointer;border:0;text-align:left;
    background:var(--panel2);box-shadow:var(--hair);border-radius:var(--cut-row);
    padding:.45rem .55rem;display:flex;flex-direction:column;gap:.1rem;color:var(--ink2)}
.dt.on{background:rgba(62,213,152,.12);box-shadow:inset 0 0 0 1px rgba(62,213,152,.4);color:var(--ink)}
.dt-x{font-size:.9rem;line-height:1;height:1rem;color:var(--ok)}
.dt-n{font-size:.75rem;font-weight:600;line-height:1.2;white-space:normal}
.dt-h{font-family:var(--mono);font-size:.58rem;letter-spacing:.1em;color:var(--muted)}

/* -------------------------------------------------------------- calendar -- */
.cal{display:flex;flex-direction:column;gap:.4rem;margin-top:.5rem}
.cd{background:var(--panel2);box-shadow:var(--hair);
    border-radius:var(--cut-row);padding:.5rem .6rem;min-width:0}
.cd.now{box-shadow:inset 0 0 0 1px rgba(255,106,26,.45)}
.cd-h{display:flex;align-items:baseline;gap:.4rem;font-size:.8rem;font-weight:600}
.cd-h span{margin-left:auto;font-family:var(--mono);font-size:.6rem;color:var(--muted)}
.ci{display:flex;gap:.5rem;align-items:baseline;font-size:.82rem;padding:.25rem 0;
    color:var(--ink2);flex-wrap:wrap;min-width:0}
.ci b{font-family:var(--mono);font-size:.68rem;color:var(--or);flex:none;font-weight:700;text-shadow:var(--bloom)}
.ci i{font-style:normal;font-size:.74rem;color:var(--muted);width:100%}
.ci.empty{color:var(--muted);font-size:.76rem}

/* ---------------------------------------------------------------- lists --- */
.tlist{display:flex;flex-direction:column;gap:.05rem;margin-top:.5rem}
.ti{display:flex;gap:.5rem;align-items:center;padding:.4rem 0;min-height:44px;
    border-bottom:1px solid var(--line2);min-width:0}
.ti:last-child{border-bottom:0}
.ti .tx{flex:1;font-size:.86rem;line-height:1.45;min-width:0;overflow-wrap:anywhere}
.ti.done .tx{color:var(--muted);text-decoration:line-through}
.ti.asap .tx{color:var(--ink)}
.ti.asap{box-shadow:inset 2px 0 0 var(--or)}
.ti.batch{box-shadow:inset 2px 0 0 var(--blue)}
.ti .wh{font-family:var(--mono);font-size:.6rem;color:var(--muted);flex:none}
.ti .ord{font-family:var(--mono);font-size:.66rem;color:var(--muted);flex:none;width:1.2rem}
.tick{flex:none;width:26px;height:26px;border-radius:var(--cut-sm);cursor:pointer;border:0;
      background:var(--deep);box-shadow:inset 0 0 0 1px var(--line);position:relative}
.tick.on{background:var(--ok);box-shadow:none}
.ti>.tick::before{content:"";position:absolute;top:-9px;right:-9px;bottom:-9px;left:-9px}   /* v358 R-P-058: a 44px tap on the 26px box */
.ti .tk-asap{opacity:.5;font-size:.7rem;letter-spacing:.04em}   /* v358 R-P-058: "ASAP", dim until it is on */
.ti .tk-asap.on{opacity:1;background:var(--or);color:#120A03}
.tick.on::after{content:"";position:absolute;left:8px;top:4px;width:6px;height:12px;
                border:solid #052117;border-width:0 2px 2px 0;transform:rotate(45deg)}
.rgrp{margin-top:.7rem}
/* a sub-heading inside a card: the kicker's mono peach caps, no rule */
.rgrp h3{font-family:var(--mono);font-size:.58rem;letter-spacing:.16em;
         text-transform:uppercase;color:var(--or-lt);margin:0 0 .1rem;font-weight:600}

/* --------------------------------------------------------------- months -- */
.mo{margin-top:.55rem;border-radius:var(--cut-row);overflow:hidden;box-shadow:var(--hair)}
.mo-h{width:100%;display:flex;gap:.5rem;align-items:baseline;flex-wrap:wrap;
      background:var(--panel2);border:0;cursor:pointer;color:var(--ink);
      padding:.6rem .65rem;min-height:44px;text-align:left;font:inherit}
.mo-h b{font-size:.88rem}
.mo-t{font-family:var(--mono);font-size:.82rem;margin-left:auto}
.mo-g{font-family:var(--mono);font-size:.76rem;font-weight:600}
.mo-n{font-family:var(--mono);font-size:.6rem;color:var(--muted);width:100%}
.mo-sum{display:grid;grid-template-columns:repeat(2,1fr);gap:.3rem;padding:.6rem .65rem;
        background:var(--deep);box-shadow:inset 0 1px 0 var(--line2)}
.mo-sum div{display:flex;justify-content:space-between;gap:.4rem;font-size:.78rem;color:var(--ink2)}
.mo-sum b{font-family:var(--mono)}
.good{color:var(--ok)} .watch{color:var(--warn)} .crit{color:var(--hot)} .pend{color:var(--muted)}

/* ----------------------------------------------------------------- jobs -- */
/* jobs-apart v1 · 29 Sep 2026: every job is its own card with space around it; an open job is
   outlined all the way round, its name bar tinted, and ends in its own close bar — no more
   one job running into the next */
.jb{min-width:0;background:var(--panel);border:1px solid var(--line2);border-radius:12px;margin-top:.5rem;overflow:hidden}
.jb.open{background:var(--panel2);border:2px solid var(--or);margin:1rem 0;box-shadow:0 6px 18px rgba(0,0,0,.35)}
.jb.open>.jb-h{background:rgba(255,106,26,.13);border-bottom:1px solid rgba(255,106,26,.4)}
.jb.open>.jb-h .jb-c{font-size:1rem;font-weight:700}
.jb-end{display:flex;gap:.5rem;flex-wrap:wrap;align-items:center;justify-content:space-between;margin-top:.9rem;padding-top:.7rem;border-top:1px dashed var(--line2)}
.jb-close{margin-left:auto}
.jb-h{width:100%;display:flex;gap:.5rem;align-items:baseline;flex-wrap:wrap;
      background:transparent;border:0;cursor:pointer;color:var(--ink);
      padding:.55rem .65rem;min-height:44px;text-align:left;font:inherit}
.jb-c{font-size:.86rem;font-weight:600;flex:1 1 8rem;min-width:0;overflow-wrap:anywhere}
.jb-v{font-family:var(--mono);font-size:.8rem}
.jb-g{font-family:var(--mono);font-size:.76rem;font-weight:600;width:3rem;text-align:right}
.jb-s{font-family:var(--mono);font-size:.58rem;letter-spacing:.1em;text-transform:uppercase;
      color:var(--muted);width:100%}
.jb-b{padding:0 .65rem .7rem}
.jb-gm{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap;margin-top:.6rem;
       background:var(--deep);box-shadow:var(--hair2);border-radius:var(--cut-row);padding:.55rem .6rem;font-size:.8rem}
.jb-gm b{font-family:var(--mono);margin-left:auto}
.split{margin-top:.7rem}
.sp-h{font-family:var(--mono);font-size:.58rem;letter-spacing:.16em;text-transform:uppercase;
      color:var(--or-lt);font-weight:600}
.sp-h .warn{color:var(--warn);letter-spacing:0;text-transform:none;font-family:inherit;font-size:.7rem;font-weight:400}

/* ----------------------------------------------------------------- owed -- */
.owed{display:flex;flex-direction:column;gap:.45rem;margin-top:.55rem}
.ow{background:var(--panel2);box-shadow:var(--hair);border-radius:var(--cut-row);
    padding:.6rem .65rem;min-width:0}
.ow-t{display:flex;gap:.5rem;align-items:baseline;font-size:.88rem}
.ow-t b{flex:1;min-width:0;overflow-wrap:anywhere}
.ow-t span{font-family:var(--mono);color:var(--hot)}
.ow-d{font-size:.74rem;color:var(--muted);margin-top:.15rem}
.ow-a{display:flex;gap:.35rem;flex-wrap:wrap;margin-top:.45rem}
.mix{margin-top:.9rem}
.mix-h{font-family:var(--mono);font-size:.58rem;letter-spacing:.16em;text-transform:uppercase;
       color:var(--or-lt);margin-bottom:.3rem;font-weight:600}
.mixbar{display:flex;height:10px;border-radius:var(--cut-sm);overflow:hidden;background:var(--deep);box-shadow:var(--hair2)}
.mixbar i.card{background:var(--hot)} .mixbar i.bank{background:var(--ok)} .mixbar i.cash{background:var(--blue)}
.mixkey{display:flex;gap:.7rem;flex-wrap:wrap;margin-top:.35rem;font-size:.72rem}
.mixkey .card{color:var(--hot)} .mixkey .bank{color:var(--ok)} .mixkey .cash{color:var(--blue)}

/* ---------------------------------------------------------------- leads -- */
.leads{display:flex;flex-direction:column;gap:.4rem;margin-top:.55rem}
.ld{background:var(--panel2);box-shadow:var(--hair);border-radius:var(--cut-row);min-width:0}
.ld.open{box-shadow:inset 0 0 0 1px rgba(255,106,26,.45)}
.ld.late{box-shadow:inset 0 0 0 1px rgba(255,107,94,.4)}
.ld.promised{box-shadow:inset 0 0 0 1px rgba(255,106,26,.6)}
.ld-h{width:100%;display:flex;gap:.5rem;align-items:baseline;flex-wrap:wrap;background:transparent;
      border:0;cursor:pointer;color:var(--ink);padding:.55rem .65rem;min-height:44px;
      text-align:left;font:inherit}
.ld-n{flex:1 1 7rem;font-size:.86rem;font-weight:600;min-width:0;overflow-wrap:anywhere}
.ld-v{font-family:var(--mono);font-size:.78rem}
.ld-f{font-family:var(--mono);font-size:.6rem;color:var(--muted);width:100%}
.ld-p{font-size:.76rem;color:var(--or-lt);padding:0 .65rem .4rem}
.ld-b{padding:0 .65rem .7rem}

/* ------------------------------------------------------------ customers -- */
.cust,.hire,.crew,.blist2,.src{display:flex;flex-direction:column;gap:.3rem;margin-top:.55rem}
.cu,.hr{background:var(--panel2);box-shadow:var(--hair);border-radius:var(--cut-row);min-width:0}
.cu.due{box-shadow:inset 0 0 0 1px rgba(255,194,77,.35)}
.hr.late{box-shadow:inset 0 0 0 1px rgba(255,107,94,.35)}
.cu-h,.hr-h{width:100%;display:flex;gap:.5rem;align-items:baseline;flex-wrap:wrap;
            background:transparent;border:0;cursor:pointer;color:var(--ink);
            padding:.55rem .65rem;min-height:44px;text-align:left;font:inherit}
.cu-n,.hr-n{flex:1 1 7rem;font-size:.85rem;font-weight:600;min-width:0;overflow-wrap:anywhere}
.cu-v{font-family:var(--mono);font-size:.78rem}
.cu-c,.hr-a,.hr-s{font-family:var(--mono);font-size:.6rem;color:var(--muted)}
.cu-b,.hr-b{padding:0 .65rem .7rem}
.cw{display:flex;gap:.5rem;align-items:baseline;padding:.45rem .1rem;min-height:44px;
    border-bottom:1px solid var(--line2);font-size:.85rem}
.cw:last-child{border-bottom:0}
.cw span{flex:1;min-width:0;overflow-wrap:anywhere}
.cw b{font-family:var(--mono)}
.cw i{font-style:normal;font-family:var(--mono);font-size:.6rem;color:var(--muted);
      width:4.5rem;text-align:right}

/* ---------------------------------------------------------------- bills -- */
.bl{display:flex;gap:.5rem;align-items:center;padding:.4rem 0;min-height:44px;
    border-bottom:1px solid var(--line2);min-width:0}
.bl:last-child{border-bottom:0}
.bl-n{flex:1;font-size:.85rem;min-width:0;overflow-wrap:anywhere}
.bl-a{font-family:var(--mono);font-size:.8rem}
.bl-d{font-family:var(--mono);font-size:.66rem;color:var(--muted);width:3rem;text-align:right}
.bl.late .bl-d{color:var(--hot)}
.bl.paid .bl-n{color:var(--muted)}

/* ------------------------------------------------------------- graphics -- */
.hist,.tr{display:flex;gap:.25rem;align-items:flex-end;height:82px;margin-top:.7rem;
          overflow-x:auto;scrollbar-width:none;padding-bottom:.2rem}
.hist::-webkit-scrollbar,.tr::-webkit-scrollbar{display:none}
.hb,.trb{flex:1 0 1.5rem;display:flex;flex-direction:column;align-items:center;
         justify-content:flex-end;height:100%;gap:.15rem;min-width:1.5rem}
.hb i,.trb i{display:block;width:100%;border-radius:2px 5px 0 0;background:var(--or);min-height:2px}
.trb i.good{background:var(--ok)} .trb i.watch{background:var(--warn)}
.trb i.crit{background:var(--hot)} .trb i.pend{background:var(--muted)}
.hb span,.trb span{font-family:var(--mono);font-size:.52rem;color:var(--muted)}
.hb b{font-family:var(--mono);font-size:.54rem;color:var(--ink2)}
.score{display:flex;flex-direction:column;gap:.5rem;margin-top:.55rem}
.sbrow{display:grid;grid-template-columns:1fr auto auto;gap:.4rem;align-items:center}   /* v358 R-P-063: was .sr, which app.css hides (screen-reader helper) */
.sr-n{grid-column:1/-1;display:flex;gap:.5rem;font-size:.82rem}
.sr-n span{margin-left:auto;font-family:var(--mono);font-size:.72rem;color:var(--muted)}
.sbrow .track{grid-column:1}
.sbrow .b{min-width:44px;min-height:44px}
.sc{display:flex;gap:.5rem;align-items:center;font-size:.8rem;min-height:34px}
.sc-n{flex:0 0 7.5rem;min-width:0;overflow-wrap:anywhere}
.sc .track{flex:1}
.sc-v{font-family:var(--mono);font-size:.74rem;width:4.5rem;text-align:right}

/* ---------------------------------------------------------------- locked -- */
.lockrows{display:flex;flex-direction:column;gap:.05rem;margin-top:.7rem}
.lockrow{display:flex;flex-direction:column;gap:.15rem;padding:.55rem 0;
         border-bottom:1px solid var(--line2);min-width:0}
.lockrow:last-child{border-bottom:0}
.lockrow b{font-size:.88rem}
.lockrow span{font-size:.8rem;color:var(--ink2);line-height:1.45;overflow-wrap:anywhere}

/* -------------------------------------------------------------- launcher -- */
/* --------------------------------------------------- kept this month -- */
/*
   One number, big enough to read from arm's length, because it is the only
   figure on the page that answers "was this month worth doing".
*/
/* Two figures, equal billing. One big number that reads $0 for three weeks
   of every month is not a dashboard, it is a broken-looking page. */
.kp-two{display:flex;gap:1.4rem;flex-wrap:wrap;margin:.55rem 0 .1rem}
/* the two figures are HUD readouts: mono, tabular */
.kp-n{font-family:var(--mono);font-size:1.85rem;font-weight:700;letter-spacing:-.02em;line-height:1.05;color:var(--ink);
      font-variant-numeric:tabular-nums}
.kp-n.good{color:var(--ok)} .kp-n.watch{color:var(--warn)} .kp-n.crit{color:var(--hot)}
.kp-n.dim{color:var(--ink2)}
.kp-l{font-family:var(--mono);font-size:.58rem;letter-spacing:.15em;text-transform:uppercase;
      color:var(--muted);margin-top:.15rem}
.kp-s{font-size:.84rem;color:var(--ink2);line-height:1.5;margin-top:.15rem}
.kp-s .good{color:var(--ok)} .kp-s .watch{color:var(--warn)} .kp-s .crit{color:var(--hot)}
/* Banked and still-open are drawn on ONE scale so the ghost cannot flatter
   the solid. The goal is a tick on that same scale, not a separate bar. */
.kp-bar{position:relative;display:flex;height:11px;margin:.75rem 0 .2rem;
        background:var(--panel2);box-shadow:inset 0 0 0 1px var(--line);
        border-radius:2px 7px 2px 7px;overflow:hidden}
.kp-bar i{display:block;height:100%}
.kp-bar i.d{background:linear-gradient(90deg,var(--or-dk),var(--or))}
.kp-bar i.o{background:repeating-linear-gradient(135deg,
            rgba(255,106,26,.32) 0 5px,rgba(255,106,26,.10) 5px 10px)}
.kp-bar u{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--ink2);
          opacity:.75;transform:translateX(-1px)}
.kp-set{margin-top:.85rem;padding-top:.7rem;border-top:1px solid var(--line)}

/* ---------------------------------------------- the drawer — Jetsy HUD -- */
/*
   The tiles carry the Jetsy console language rather than generic rounded
   rectangles: navy panel lit from above, a cut corner on the diagonal, thin
   orange corner brackets, and the mark set in mono with a little bloom on it.
   Palette is app.css's tokens, which are already the logo pack's — #FF6A1A
   orange, #FFB259 peach, the navy stack. Nothing new is invented here.

   Brackets sit top-LEFT and bottom-RIGHT on purpose: the count badge owns the
   top-right corner, and a bracket under a 3-digit badge reads as a glitch.
*/
.lx{margin:1rem 0}
.lx-hd{font-family:var(--mono);font-size:.58rem;letter-spacing:.16em;text-transform:uppercase;
       color:var(--or-lt);margin-bottom:.5rem;display:flex;align-items:center;gap:.5rem}
.lx-hd::before{content:"";width:14px;height:2px;background:var(--or);flex:0 0 auto}
.lx-hd::after{content:"";height:1px;flex:1 1 auto;min-width:0;
              background:linear-gradient(90deg,var(--line) 0%,transparent 100%)}
.lx-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(4.6rem,1fr));gap:.5rem}

.lx-t{position:relative;cursor:pointer;border:0;
      background:linear-gradient(180deg,#15273A 0%,#0C1826 100%);
      box-shadow:inset 0 0 0 1px var(--line);
      border-radius:3px 14px 3px 14px;
      padding:.62rem .35rem .52rem;min-height:78px;display:flex;flex-direction:column;
      align-items:center;justify-content:center;gap:.3rem;color:var(--ink2);font:inherit}
.lx-t::before,.lx-t::after{content:"";position:absolute;width:9px;height:9px;
      border:1px solid rgba(255,106,26,.5);pointer-events:none}
.lx-t::before{top:5px;left:5px;border-right:0;border-bottom:0}
.lx-t::after{bottom:5px;right:5px;border-left:0;border-top:0}
.lx-t:hover{box-shadow:inset 0 0 0 1px rgba(255,106,26,.55)}
.lx-t:active{box-shadow:inset 0 0 0 1px var(--or)}
.lx-t:hover::before,.lx-t:hover::after,
.lx-t:active::before,.lx-t:active::after{border-color:var(--or)}
.lx-m{position:relative;font-family:var(--mono);font-size:1rem;font-weight:700;color:var(--or);
      letter-spacing:.06em;text-shadow:0 0 14px rgba(255,106,26,.45)}
.lx-n{position:relative;font-size:.62rem;line-height:1.2;text-align:center;white-space:normal;
      overflow-wrap:anywhere;color:var(--ink2)}
.lx-b{position:absolute;top:.3rem;right:.32rem;min-width:1.15rem;height:1.05rem;
      border-radius:2px 8px 2px 8px;background:var(--or);color:#0A1622;font-family:var(--mono);
      font-size:.58rem;font-weight:700;display:flex;align-items:center;justify-content:center;
      padding:0 .25rem;box-shadow:0 0 10px rgba(255,106,26,.4)}
.lx-all{margin-top:.75rem;width:100%}
/* the bar above an open card: the button, then the card's name as a kicker */
.lx-bar{display:flex;gap:.6rem;align-items:center;margin:.8rem 0 .2rem;min-width:0}
.lx-bar span{font-family:var(--mono);font-size:.6rem;letter-spacing:.16em;text-transform:uppercase;
             color:var(--or-lt);font-weight:600;min-width:0;overflow-wrap:anywhere;
             flex:1 1 auto;display:flex;align-items:center;gap:.5rem}
.lx-bar span::before{content:"";width:14px;height:2px;background:var(--or);flex:0 0 auto}
.lx-bar span::after{content:"";height:1px;flex:1 1 auto;min-width:.6rem;
             background:linear-gradient(90deg,var(--line) 0%,transparent 100%)}

/* ------------------------------------------------------------ save bar --- */
/* the save readout is a HUD chip: mono caps on a navy slab with the small chamfer */
.bbar{position:sticky;bottom:calc(var(--tabh) + env(safe-area-inset-bottom));z-index:20;
      display:flex;gap:.5rem;align-items:center;justify-content:flex-end;
      padding:.4rem 0;min-height:0}
.bbar .m{font-family:var(--mono);font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;color:var(--or-lt);
         background:rgba(5,9,15,.92);box-shadow:var(--hair);border-radius:var(--cut-sm);padding:.35rem .55rem}
.bbar:empty{display:none}

/* ---------------------------------------------------- very narrow phones -- */
@media (max-width:360px){
  .jf2{grid-template-columns:1fr}
  .mo-sum{grid-template-columns:1fr}
  .lx-grid{grid-template-columns:repeat(auto-fill,minmax(4.1rem,1fr))}
  .sc-n{flex-basis:5.5rem}
}

/* =============================================================================
   The four cards that came across last (2026-09-12): CFO, Receipts,
   Test callers, Your other boards. Same tokens, same 44px rule.
   ============================================================================= */
.bc .pill{display:inline-flex;align-items:center;font-family:var(--mono);font-size:.58rem;letter-spacing:.1em;
  text-transform:uppercase;padding:.28rem .55rem;border-radius:var(--cut-sm);background:var(--panel2);
  box-shadow:var(--hair);color:var(--ink2);margin-left:auto}
.bc .pill.good{color:var(--ok);box-shadow:inset 0 0 0 1px rgba(62,213,152,.4)}
.bc .pill.crit{color:var(--hot);box-shadow:inset 0 0 0 1px rgba(255,107,94,.4)}
.bc .pill.watch{color:var(--warn);box-shadow:inset 0 0 0 1px rgba(255,194,77,.4)}
.bc .pill.pend{color:var(--muted)}
/* a link inside body text is peach — orange type is for marks and buttons */
.bc .linkish{background:none;border:0;color:var(--or-lt);font:inherit;font-size:inherit;cursor:pointer;
  text-decoration:underline;text-underline-offset:2px;min-height:0;
  /* a 44px thumb target on an inline link, without moving the line */
  display:inline-block;padding:.8rem 0;margin:-.8rem 0;line-height:1.4}
.bc .mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.bc .b.on{box-shadow:inset 0 0 0 1px var(--or);color:var(--or-lt);background:rgba(255,106,26,.12)}
.bc .phx{width:26px;height:26px;border-radius:var(--cut-sm);border:0;background:var(--panel3);box-shadow:var(--hair);color:var(--ink2);
  font-size:1rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0}
.bc .phx:hover{background:rgba(255,107,94,.25);color:var(--hot)}

/* ------------------------------------------------------------------- CFO -- */
.cfo-sand{display:flex;align-items:center;gap:.45rem;font-size:.8rem;color:var(--ink2);margin-top:.5rem;min-height:44px}
.cfo-bals{display:flex;flex-direction:column;gap:.35rem;margin-top:.5rem}
.cfo-bal{display:grid;grid-template-columns:1fr auto;gap:.15rem .6rem;align-items:baseline;
  background:var(--panel2);box-shadow:var(--hair);border-radius:var(--cut-row);padding:.5rem .65rem;min-width:0}
.cfo-bal>span{font-size:.8rem;color:var(--ink2);min-width:0;overflow-wrap:anywhere}
.cfo-bal>span i{font-style:normal;color:var(--muted);font-size:.7rem}
.cfo-bal>b{font-size:.95rem;color:var(--ink);text-align:right;white-space:nowrap;font-family:var(--mono)}
.cfo-bal>b.balneg{color:var(--hot)}
.cfo-bal>em{grid-column:1/-1;font-style:normal;font-size:.7rem;color:var(--muted)}
.cfo-bal>input{grid-column:2;max-width:9rem;min-height:38px;text-align:right}
.cfo-bal.total{box-shadow:inset 0 0 0 1px rgba(255,106,26,.35)}
.cfo-bal.total>b{color:var(--or-lt);font-size:1.05rem}
.cfo-asof{font-size:.7rem;color:var(--muted)}
.cfo-banks{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin-top:.7rem}
.cfo-bank{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem;color:var(--ink);background:var(--panel2);
  box-shadow:var(--hair);border-radius:var(--cut-sm);padding:.3rem .45rem .3rem .7rem;min-height:36px}
.cfo-bank.needy{box-shadow:inset 0 0 0 1px rgba(255,194,77,.5)}
.cfo-fix{font-size:.72rem}
.cfo-bar{display:flex;gap:.4rem;align-items:center;margin-top:.8rem;flex-wrap:wrap}
.cfo-bar input{flex:1 1 10rem;min-width:0;-webkit-appearance:none}
.cfo-monav{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-top:.7rem}
.cfo-monav b{font-size:.95rem}
.cfo-tot{display:flex;gap:.9rem;flex-wrap:wrap;font-size:.78rem;color:var(--ink2);margin-top:.5rem}
.cfo-tot b{font-size:.9rem;margin-left:.25rem}
.tin{color:var(--ok)} .tout{color:var(--ink)}
.cfo-graph{margin-top:.7rem;background:var(--panel2);box-shadow:var(--hair);border-radius:var(--cut-row);padding:.6rem .7rem}
.cg-t{font-family:var(--mono);font-size:.58rem;letter-spacing:.16em;text-transform:uppercase;color:var(--or-lt);font-weight:600}
.cg-in{font-size:.76rem;color:var(--ink2);margin:.3rem 0 .45rem;line-height:1.45}
.cg-warn{color:var(--warn)}
.cg-row{display:grid;grid-template-columns:minmax(0,7.5rem) 1fr auto 2.4rem;gap:.45rem;align-items:center;font-size:.76rem;margin-top:.3rem}
.cg-row.un .cg-l{color:var(--warn)}
.cg-l{color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cg-bar{height:8px;background:var(--deep);box-shadow:var(--hair2);border-radius:var(--cut-sm);overflow:hidden}
.cg-bar i{display:block;height:100%;background:var(--or);border-radius:var(--cut-sm)}
.cg-row.un .cg-bar i{background:var(--warn)}
.cg-v{color:var(--ink)} .cg-p{color:var(--muted);text-align:right;font-size:.66rem}
.cfo-sect{font-family:var(--mono);font-size:.58rem;letter-spacing:.16em;text-transform:uppercase;color:var(--or-lt);font-weight:600;margin-top:.8rem}
.cfo-list{max-height:22.5rem;overflow-y:auto;margin-top:.3rem;-webkit-overflow-scrolling:touch;
  background:var(--panel2);box-shadow:var(--hair);border-radius:var(--cut-row);padding:.2rem .4rem}
.txn{display:grid;grid-template-columns:1fr auto;gap:.15rem .5rem;align-items:center;padding:.4rem .2rem;border-bottom:1px solid var(--line2)}
.cfo-list.sel .txn{grid-template-columns:auto 1fr auto}
.txn:last-child{border-bottom:0}
.txn.un .tn{color:var(--ink)}
.txn .txt{background:none;border:0;padding:0;text-align:left;display:flex;gap:.5rem;align-items:baseline;min-width:0;min-height:36px;color:inherit;font:inherit;cursor:pointer}
.txn .td{color:var(--muted);font-size:.68rem;flex:none}
.txn .tn{font-size:.82rem;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.txn.open .tn{white-space:normal}
.txn .tp{font-style:normal;font-size:.62rem;color:var(--warn)}
.txn .ta{font-size:.84rem;color:var(--ink);white-space:nowrap;font-family:var(--mono)}
.txn select{grid-column:1/-1;min-height:38px;font-size:.78rem;padding:.3rem .5rem}
.txn .tsel{width:22px;height:22px;accent-color:var(--or)}
.txd{font-size:.76rem;color:var(--ink2);padding:.2rem .2rem .55rem;line-height:1.45}
.txd b{display:block;color:var(--ink)}
.cfo-applybar{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin-top:.6rem;
  background:var(--panel2);box-shadow:inset 0 0 0 1px rgba(255,106,26,.45);border-radius:var(--cut-row);padding:.5rem .6rem}
.cfo-selcount{font-size:.78rem;color:var(--ink2)}
.cfo-applybar select{flex:1 1 8rem;min-height:38px}

/* -------------------------------------------------------------- receipts -- */
.phrow{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.6rem}
.ph{position:relative;width:92px;display:flex;flex-direction:column;gap:.15rem}
.ph .phview{display:block;width:92px;height:92px;border-radius:var(--cut-row);overflow:hidden;background:var(--panel2);box-shadow:var(--hair)}
.ph img{width:100%;height:100%;object-fit:cover;display:block}
.ph i{font-style:normal;font-family:var(--mono);font-size:.6rem;color:var(--muted);text-align:center}
.ph .phx{position:absolute;top:-6px;right:-6px;background:var(--panel);box-shadow:var(--hair)}

/* ---------------------------------------------------------- test callers -- */
.ca-list{display:flex;flex-direction:column;gap:.5rem;margin-top:.7rem}
.ca-row{background:var(--panel2);box-shadow:var(--hair);border-radius:var(--cut-row);padding:.6rem .7rem;min-width:0}
.ca-row.pass{box-shadow:inset 0 0 0 1px rgba(62,213,152,.35)}
.ca-row.fail{box-shadow:inset 0 0 0 1px rgba(255,107,94,.4)}
.ca-hd{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}
.ca-nm{display:flex;flex-direction:column;min-width:0;flex:1 1 9rem}
.ca-nm b{font-size:.88rem;color:var(--ink)}
.ca-nm span{font-size:.72rem;color:var(--muted)}
.ca-hd .pill{margin-left:0}
.ca-why-t{font-size:.76rem;color:var(--ink2);line-height:1.45;margin-top:.4rem}
.ca-flag{font-size:.76rem;color:var(--hot);line-height:1.45;margin-top:.35rem;padding-left:.7rem;border-left:2px solid rgba(255,107,94,.5)}
.ca-note{font-size:.74rem;color:var(--warn);line-height:1.45;margin-top:.3rem;padding-left:.7rem;border-left:2px solid rgba(255,194,77,.4)}
.ca-acts{display:flex;align-items:center;gap:.6rem;margin-top:.45rem;min-height:36px}
.ca-fine{font-family:var(--mono);font-size:.62rem;color:var(--muted)}
.ca-talk{margin-top:.5rem;display:flex;flex-direction:column;gap:.35rem}
.ca-line{font-size:.8rem;line-height:1.45;padding:.45rem .6rem;border-radius:var(--cut-sm);background:var(--deep);box-shadow:var(--hair2)}
.ca-line.her{background:rgba(255,106,26,.08)}
.ca-who{display:block;font-family:var(--mono);font-size:.58rem;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);margin-bottom:.15rem}
.ca-final{font-size:.76rem;color:var(--ink2);line-height:1.5;margin-top:.3rem}
.ca-form{margin-top:.7rem;background:var(--panel2);box-shadow:var(--hair);border-radius:var(--cut-row);padding:.2rem .7rem .7rem}
.ca-exp{display:grid;grid-template-columns:1fr 1fr;gap:.2rem .6rem;margin-top:.6rem}
.ca-exp label{display:flex;align-items:center;gap:.4rem;font-size:.76rem;color:var(--ink2);min-height:36px}
.ca-exp input{width:20px;height:20px;accent-color:var(--or)}

/* ---------------------------------------------------------- other boards -- */
.ob-list{display:flex;flex-direction:column;gap:.4rem;margin-top:.6rem}
.ob-row{display:flex;align-items:center;gap:.4rem;min-width:0}
.ob-a{flex:1;min-width:0;display:flex;flex-direction:column;text-decoration:none;color:var(--ink);
  background:var(--panel2);box-shadow:var(--hair);border-radius:var(--cut-row);padding:.55rem .7rem;min-height:44px;justify-content:center}
.ob-a b{font-size:.86rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ob-a span{font-size:.72rem;color:var(--muted)}
.ob-a:hover{box-shadow:inset 0 0 0 1px var(--or)}

/* =============================================================================
   look round, 26 Sep 2026 — builder A.
   board.js and app.js inject their own rules at runtime (ATT_CSS, CAL_CSS,
   MONEY_CSS, CREW_CSS, WR_CSS, SRC_CSS, GP_CSS, LOST_CSS, AFTER_CSS, WALK_CSS,
   TELL_CSS, appStyle). Their COLOURS now resolve to the brand through the
   tokens app.css defines (--accent, --acc, --line, --line2, --ink, --muted,
   --warn, --mono). Their SHAPES — 9px/11px radii, round chips, and the few
   literal non-brand rgba() tints they carry — are brought into the console
   language here. Every selector below is more specific than the injected
   one it overrides, so source order does not matter. Layout is untouched.
   ============================================================================= */

/* the calendar (CAL_CSS) */
.jcal .jc-a{border-radius:var(--cut-sm);background:var(--panel2);box-shadow:var(--hair);border:0;color:var(--ink2)}
.jcal .jc-d{border-radius:var(--cut-sm);background:var(--panel2);box-shadow:var(--hair);border:0}
.jcal .jc-d.now{box-shadow:inset 0 0 0 1px var(--or)}
.jcal .jc-d.now .jc-dn{color:var(--or);text-shadow:var(--bloom)}
.jcal .jc-d.sel{background:rgba(255,106,26,.13);box-shadow:inset 0 0 0 1px var(--or)}
.jcal .jc-dw{color:var(--muted)}
.jcal .jc-d.sel .jc-dw,.jcal .jc-d.now .jc-dw{color:var(--or-lt)}
.jcal .jc-et,.jcal .jc-k{color:var(--ink2)}
/* the address under an estimate and the names under a row are body text,
   not readouts — ink2 keeps them over 4.5:1 on the tinted rows */
.jcal .jc-eb p,.jcal .jc-r p{color:var(--ink2)}
.jcal .jc-dots i.e{background:var(--or)}
.jcal .jc-dots i.a{background:var(--blue)}
.jcal .jc-dots i.c{background:var(--warn)}
.jcal .jc-dots i.n{background:var(--ok)}
.jcal .jc-est{border:0;box-shadow:inset 0 0 0 1px var(--or);background:rgba(255,106,26,.07);border-radius:var(--cut-row)}
.jcal .jc-r{border:0;box-shadow:var(--hair);background:var(--panel2);border-radius:var(--cut-row)}
.jcal .jc-r.late{box-shadow:inset 0 0 0 1px rgba(255,107,94,.5);background:linear-gradient(180deg,rgba(255,107,94,.07),transparent 60%),var(--panel2)}
.jcal .jc-none{border:1px dashed var(--line);border-radius:var(--cut-row)}
.jcal .jc-add{border:1px dashed var(--line);border-radius:var(--cut-row);color:var(--or-lt)}
/* the tick and the × on a calendar line were 21px and 27px targets; a
   transparent border takes each to 44px while the visible box stays small
   (background-clip keeps the fill inside the border, the radius is the
   outer radius so the inner corners keep the small chamfer) */
.jcal .jc-tick{width:2.75rem;height:2.75rem;border:12px solid transparent;background:var(--deep);
  background-clip:padding-box;box-shadow:inset 0 0 0 1px var(--line);border-radius:14px 20px 14px 20px;margin:-.7rem 0}
.jcal .jc-xi{width:2.75rem;height:2.75rem;border:8px solid transparent;background:var(--deep);
  background-clip:padding-box;box-shadow:inset 0 0 0 1px var(--line);border-radius:10px 16px 10px 16px;margin:-.35rem 0}
.jcal .jc-xi:active{border-color:transparent;color:var(--hot);box-shadow:inset 0 0 0 1px var(--hot)}
.jcal .jc-i{min-height:2.4rem}
.jcal .jc-pill{border-radius:var(--cut-sm)}
.jcal .jc-mb{border-radius:var(--cut-sm);border:0;box-shadow:var(--hair);background:var(--panel2);min-height:44px}
.jcal .jc-mb.on{background:rgba(255,106,26,.13);box-shadow:inset 0 0 0 1px var(--or);color:var(--or-lt)}
.jcal .jc-mh{color:var(--ink)}
.jcal .jc-md{border-radius:var(--cut-sm)}
.jcal .jc-hd{font-size:1rem}

/* the Needs you today rows (ATT_CSS): the fold chevron */
.att .at-c{color:var(--muted)}

/* Get paid (GP_CSS): the ageing tiles */
.bc .gp-age>div{border:0;box-shadow:var(--hair);background:var(--panel2);border-radius:var(--cut-row)}
.bc .gp-age .gp-hot{box-shadow:inset 0 0 0 1px rgba(255,107,94,.55);background:linear-gradient(180deg,rgba(255,107,94,.08),transparent 60%),var(--panel2)}

/* the crew chips (CREW_CSS) */
.bc .cr-c{border:0;box-shadow:var(--hair);background:var(--panel2);border-radius:var(--cut-sm)}
.bc .cr-c.on{box-shadow:inset 0 0 0 1px var(--or);background:rgba(255,106,26,.13)}
.bc .cr-c.on i{color:var(--or-lt)}
.bc .cr-c.cr-more{box-shadow:none;border:1px dashed var(--line);background:transparent}

/* After the job (AFTER_CSS): the link box and the review line */
.bc .af input[type=url]{background:var(--deep);box-shadow:var(--hair);border-radius:var(--cut-sm)}
.bc .af input[type=url]:focus{box-shadow:inset 0 0 0 1px var(--or),0 0 0 3px rgba(255,106,26,.18)}
.bc .af .af-fl{box-shadow:var(--hair);border-radius:var(--cut-row)}

/* Why we lose (LOST_CSS) */
.bc .lz-pick{border-radius:var(--cut-row);box-shadow:inset 0 0 0 1px var(--or);background:var(--panel2)}

/* the walkthrough (WALK_CSS) */
.bc .wk .wk-t{border:0;box-shadow:var(--hair);background:var(--deep);border-radius:var(--cut-sm)}
.bc .wk .wk-t.on{box-shadow:inset 0 0 0 1px var(--ok);background:rgba(62,213,152,.16)}

/* Where work comes from (SRC_CSS) */
.bc .sc.sc-t{border-radius:var(--cut-sm)}
.bc .sc-j{border-radius:var(--cut-sm)}
.bc .sc-l{border-left:2px solid var(--line)}

/* What's running (WR_CSS): a stamp that did not load is a warning, in orange
   through --accent; the value is a mono readout */
.bc .wr .wr-v{color:var(--ink2)}
.bc .wr .wr-v.off{color:var(--or-lt)}

/* the money lines (MONEY_CSS) */
.bc .pi-l b,.bc .pi-r b{color:var(--ink)}

/* the customer paper (.jdoc, .jdoc-sheet) is builder C's and is not touched here */

/* ===== calendar round · H2: the calendar in the console language (board 37) — appended at integration, 26 Sep 2026 ===== */
/* =============================================================================
   Calendar round, 26 Sep 2026 — helper H2: the calendar's Jetsy look.
   Appended to board.css after builder A's ".jcal" overrides; this file only
   extends them. Everything is scoped under .jcal, and every selector is at
   least as specific as the injected rule it overrides (CAL1_CSS … CAL5_CSS,
   the calStyle1..5() sheets the five calendar builds add at runtime), so
   source order against those <style> tags does not matter.

   The console language, as A wrote it: panel2 ground on a hairline, the
   softer chamfer on a row, the small chamfer on a button or badge, mono for
   times and counts, peach mono caps for a kicker, and orange for exactly
   three things — today, the selected day, and the one primary button.
   Tokens are app.css's (--cut-row, --cut-sm, --hair, --bloom, --or-lt …).

   Class names: every one below was read off the builders' files in
   /home/claude/sb/cal (board37-icons.js, -day.js, -list.js, -move.js,
   -ics.js) — none is assumed.
   ============================================================================= */

/* --------------------------------------------------- the icons (board37-icons) -- */
/* .jce-e the 1em box (data-k=kind) · .jce-i the svg · .jce-dots the 2x2 in a
   strip/grid cell · .jce-n the +N · .jce-k icon + word · .jce-legend */

/* +N in a day cell: a small count chip with the small chamfer — orange type
   on the faint orange wash the board uses for a pressed filter, not a solid
   badge (a solid one shouts louder than the icons beside it, and inside
   today's cell it was one orange too many). Half a rem is as small as a
   figure can go and still be read at arm's length. */
.jcal .jce-n{font-family:var(--mono);font-size:.5rem;line-height:1.1;font-weight:700;
  color:var(--or-lt);background:rgba(255,106,26,.16);box-shadow:none;
  border-radius:1px 5px 1px 5px;padding:.1rem .2rem .08rem;white-space:nowrap}
/* the icons sit a touch clear of the day number */
.jcal .jc-d .jce-dots{margin-top:.08rem}
.jcal .jc-md .jce-dots{margin-top:.04rem}

/* the legend was a row of round-bordered pills; now each entry is the badge
   the board already uses for a status (.pill): the small chamfer, panel2 on
   a hairline, mono caps in ink2, the icon in its own colour. A hairline
   above parts it from the add button. */
.jcal .jce-legend{display:flex;flex-wrap:wrap;gap:.3rem .35rem;margin:.85rem 0 0;
  padding-top:.7rem;border-top:1px solid var(--line2)}
.jcal .jce-legend .jce-k{flex:0 0 auto;flex-direction:row;align-items:center;gap:.38rem;
  min-height:30px;padding:.28rem .62rem .28rem .5rem;border:0;border-radius:var(--cut-sm);
  background:var(--panel2);box-shadow:var(--hair);
  font-family:var(--mono);font-size:.62rem;font-weight:500;letter-spacing:.1em;
  text-transform:uppercase;color:var(--ink2);white-space:nowrap;line-height:1}

/* the kind at the left of a day row (the icon over its word, in the 3.1rem
   column .jc-k already has): the word is a small mono cap label in ink2 —
   one line, never broken mid-word. The icon sizes (.9rem in the legend,
   1.15rem on a row) are the icon build's own and stay as its harness
   expects them. */
.jcal .jct-i .jce-k i{font-family:var(--mono);font-size:.54rem;font-weight:600;
  letter-spacing:.04em;text-transform:uppercase;color:var(--ink2);line-height:1.2;white-space:nowrap}

/* ------------------------------------------ the day as a timeline (board37-day) -- */
/* a row is .jc-r.jct-i (data-k=kind; .jct-est on an estimate, .late on an
   overdue callback) — A's .jc-r rules give it the ground, the hairline, the
   row chamfer and the late red. Inside: the kind (.jc-k.jce-k) · .jct-b
   with .jct-txt (.jc-done when ticked: .jct-h the head line — tick, .jct-t
   time, .jct-n name — then .jct-a address, .jct-w who with .jct-wl its
   label) and .jc-acts with the buttons · .jct-x the × (a .jc-xi.jc-x) at
   the row's top right · .jct-c the counts under the day heading */

/* the estimate row keeps its accent, in A's shape: a soft orange ring and a
   faint wash on the panel ground, not a bare tint on the card */
.jcal .jct-i.jct-est{border:0;box-shadow:inset 0 0 0 1px rgba(255,106,26,.45);
  background:linear-gradient(180deg,rgba(255,106,26,.08),transparent 60%),var(--panel2)}
.jcal .jct-i.late{box-shadow:inset 0 0 0 1px rgba(255,107,94,.5);
  background:linear-gradient(180deg,rgba(255,107,94,.07),transparent 60%),var(--panel2)}
/* the time is a mono readout in peach, tabular, next to the name in ink;
   on an overdue callback it is the day it was due, in the status red */
.jcal .jct-t{font-family:var(--mono);font-size:.76rem;font-weight:600;letter-spacing:.02em;
  color:var(--or-lt);font-variant-numeric:tabular-nums}
.jcal .jct-i.late .jct-t{color:var(--hot)}
.jcal .jct-n{color:var(--ink)}
/* the address and the crew are body text, not readouts: ink2 keeps them over
   4.5:1 on the tinted rows (A's rule for .jc-r p) */
.jcal .jct-i .jct-a,.jcal .jct-i .jct-w{color:var(--ink2)}
.jcal .jct-a a{color:var(--or-lt)}
/* the crew label is a peach kicker before the names */
.jcal .jct-wl{font-size:.58rem;font-weight:600;letter-spacing:.12em;color:var(--or-lt)}
/* the counts under the day heading: a HUD readout — mono caps, the total in
   ink2 as the accent value, the rest muted */
.jcal .jct-c{letter-spacing:.12em;color:var(--muted)}
.jcal .jct-c span:first-child{color:var(--ink2)}
/* the tick on an appointment row sits in the head line: A's 44px target with
   its transparent 12px border pulled in so the time does not float away */
.jcal .jct-h .jc-tick{margin:-.7rem -.3rem -.7rem -.45rem}
/* the row's × (a .jc-xi.jc-x at the row's top right) was set to 2.2rem by
   the timeline's own sheet — 19px visible on a 35px target; back to A's
   44px target with its transparent border, the visible 28px box sitting in
   the corner level with the head line (the negative margins push the
   transparent border out into the row's padding) */
.jcal .jct-i>.jct-x{width:2.75rem;height:2.75rem;margin:-.5rem -.5rem 0 .1rem}
/* "open lead" in an actions row: the same thumb height as the buttons
   beside it, without A's negative margin (that was for a link in a line) */
.jcal .jct-i .jc-acts .linkish{padding:.7rem .1rem;margin:0}

/* ------------------------------------------------------- Move it (board37-move) -- */
/* .jcm-b the Move button (.b.sm) · .jcm-p the inline picker (a column, flex
   1 1 100% in the row's .jc-acts) · .jcm-w its first line: .jcm-d date,
   .jcm-t time · .jcm-a its second: .jcm-go Move (.b.sm.pri, the one orange
   button, two parts wide) and .jcm-no Keep (.b.sm, one part) */
/* the picker is a navy inset slab with the row chamfer under the row's
   buttons; the boxes inside sit on the panel ground so they read as boxes */
.jcal .jcm-p{margin-top:.4rem;padding:.55rem .6rem;gap:.45rem;
  background:var(--deep);box-shadow:var(--hair);border-radius:var(--cut-row)}
/* the two boxes share the first line on a 402px phone with the padding
   trimmed to what "09/26/2026" and "10:00 AM" need (Safari draws them as
   compact labels and needs less); on a narrower phone the time drops to
   the next line. The move's own sheet sets both at .jcal .jcm-w
   input[type=…] — one class more here outranks it. */
.jcal .jcm-w .jcm-d[type=date]{flex:1 1 7.5rem;min-width:0;padding:.4rem .5rem;background:var(--panel);min-height:44px}
.jcal .jcm-w .jcm-t[type=time]{flex:1 1 6.5rem;min-width:0;padding:.4rem .5rem;background:var(--panel);min-height:44px}
/* Keep is the quiet one: ink2, not the muted grey, so it still reads as a
   button on the navy slab */
.jcal .jcm-a .jcm-no{color:var(--ink2)}

/* ------------------------------------------------------ List mode (board37-list) -- */
/* .jcl the wrapper · .jcl-day a day group (.now on today, data-d) · .jcl-h
   its h4 (.jcl-hd the date, .jcl-hl Today / Tomorrow) · .jcl-i a line (a
   button, data-bact=callist; .late on an overdue callback) · .jcl-e the icon
   box · .jcl-t time · .jcl-n name (.jc-done when ticked) · .jcl-go the › ·
   .jcl-none (a .jc-none) */
.jcal .jcl-day{margin:0 0 .9rem;display:flex;flex-direction:column;gap:.3rem}
/* a day heading is a kicker: mono peach caps, the 14px orange rule before,
   the fading hairline after (the drawer's .lx-hd, A's section headings) */
.jcal .jcl-h{display:flex;align-items:center;gap:.5rem;margin:0 0 .1rem;min-width:0;
  font-family:var(--mono);font-size:.68rem;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:var(--or-lt);line-height:1.3}
.jcal .jcl-h::before{content:"";width:14px;height:2px;background:var(--or);flex:0 0 auto}
.jcal .jcl-h::after{content:"";height:1px;flex:1 1 auto;min-width:.6rem;
  background:linear-gradient(90deg,var(--line) 0%,transparent 100%)}
.jcal .jcl-hd{flex:0 1 auto;min-width:0;overflow-wrap:anywhere}
.jcal .jcl-hl{font-size:inherit;font-weight:600;letter-spacing:inherit;color:var(--muted);flex:0 0 auto}
/* Today / Tomorrow is parted from the date by the HUD's own separator */
.jcal .jcl-hl::before{content:"\B7";margin-right:.5rem;color:var(--muted);text-shadow:none}
/* today's group: the heading goes orange with the bloom (the mark device),
   and each of its lines carries a 2px orange rule at its left edge — the
   same "this one" bar the open job and the ASAP to-do carry */
.jcal .jcl-day.now .jcl-hd,.jcal .jcl-day.now .jcl-hl{color:var(--or);font-weight:700;text-shadow:var(--bloom)}
.jcal .jcl-day.now .jcl-i{box-shadow:inset 2px 0 0 var(--or),var(--hair)}
.jcal .jcl-day.now .jcl-i.late{box-shadow:inset 2px 0 0 var(--or),inset 0 0 0 1px rgba(255,107,94,.5)}
/* a line is a tappable row: panel2 on a hairline with the row chamfer, 44px,
   the icon in its colour, a mono time column in peach, the name, the › */
.jcal .jcl-i{border:0;background:var(--panel2);box-shadow:var(--hair);border-radius:var(--cut-row);
  min-height:44px;padding:.5rem .65rem;margin:0;font-size:.88rem;color:var(--ink);
  transition:background .15s,box-shadow .15s}
.jcal .jcl-i:hover{box-shadow:inset 0 0 0 1px var(--or)}
.jcal .jcl-i:active{background:rgba(255,106,26,.12);box-shadow:inset 0 0 0 1px var(--or)}
.jcal .jcl-i.late{box-shadow:inset 0 0 0 1px rgba(255,107,94,.5);
  background:linear-gradient(180deg,rgba(255,107,94,.07),transparent 60%),var(--panel2)}
.jcal .jcl-e{font-size:1.1rem}
.jcal .jcl-t{font-weight:600;letter-spacing:.02em;color:var(--or-lt);font-variant-numeric:tabular-nums}
.jcal .jcl-i.late .jcl-t{color:var(--hot)}
.jcal .jcl-go{color:var(--muted);font-family:var(--mono);font-size:1.15rem}
.jcal .jcl-none{border:1px dashed var(--line);border-radius:var(--cut-row)}

/* ------------------------------------------------ out to the phone (board37-ics) -- */
/* .jcs-acts the row under the day heading · .jcs-share Share the day (.b.sm)
   · .jcs-note "Copied" · .jcs-ics Add to my calendar (an a.b.sm) — the two
   buttons already take A's .b.sm shape; only the readout is touched */
.jcal .jcs-acts{gap:.45rem}
/* "Copied" is a status readout: mono caps in the all-clear green, through
   the token, with the kicker's tracking */
.jcal .jcs-note{color:var(--ok);font-size:.6rem;letter-spacing:.12em}

/* ===== integration · 26 Sep 2026 (CSS only) ===== */
/* In Spanish the kind words run long ("cotización", "prospecto nuevo") and,
   because a flex item's min-width is auto, each such row pushed its text
   column right by a different amount, so the rows no longer lined up. The
   kind column on a timeline row is 3.6rem and a two-word kind wraps at its
   space — never inside a word — so every row's text starts on one line. */
.jcal .jct-i>.jce-k{flex:0 0 3.6rem;width:3.6rem;min-width:0}
.jcal .jct-i .jce-k i{white-space:normal;overflow-wrap:normal;word-break:normal;hyphens:none}

/* ===== fit round · 26 Sep 2026 · every screen fits the phone — appended at integration (agent 9) ===== */

/* ----- fit round · 03-today · Today: Every day strip, Needs you rows, the section headings ----- */
/* =====================================================================
   FIT ROUND · slice 03-today · 26 Sep 2026
   The Today tab: the Every day strip and the Needs you today rows.
   Joe, from his phone (12:48 screenshot): "DASHBOARD" ran out of its
   tile, the "Waiting on approval" tile stood very tall, and he has asked
   twice for Today to be compact. Layout only — same colours, fonts,
   chamfers and mono labels as the look round.
   Every selector starts at #boardtoday / #boardtoday2 (the two Today
   roots), so nothing here reaches the Business tab or any other screen.
   ===================================================================== */

/* ---- Every day: three tiles to a row on a phone, not four ----
   At four to a row (393-430 wide) a tile was ~80px, too narrow for one
   word like "DASHBOARD" (it ran 4-7px out of its tile) and a long task
   stood five lines tall. Three to a row gives each tile ~100-120px: every
   word fits and the tall tiles lose two lines. Joe's nine ticks are still
   three rows. On anything wider (tablet, desktop) it still adds columns. */
#boardtoday .dstrip{grid-template-columns:repeat(auto-fill,minmax(6rem,1fr))}

/* ---- Every day: the tick mark no longer takes a line of its own ----
   The ✓ had its own line at the top of every tile, empty on the ones not
   ticked yet — a blank band across every tile. It is now drawn at the
   start of the name, in the same top-left corner, size and colour, and
   the name runs on beside it: an unticked tile starts with its name, a
   ticked one reads "✓ Emails". If the first word does not fit beside the
   ✓, the word goes to the next line whole (the ✓ keeps the top line, as
   before) — it is never cut to make room. Tiles are 44px tall at least
   (the tap size), not 56px. The original ✓ span is hidden, not removed;
   the drawn one is the same character, so the button still reads
   "✓ Emails". */
#boardtoday .dstrip .dt{min-height:44px}
#boardtoday .dstrip .dt-x{display:none}
#boardtoday .dstrip .dt.on .dt-n::before{content:"\2713";display:inline-block;margin-right:.3rem;
  font-size:.9rem;font-weight:400;line-height:1;color:var(--ok)}

/* ---- Every day: a word longer than the tile breaks inside it ----
   A single long word (Joe types his own) wraps at the tile edge instead
   of running out of the box. Normal words still wrap at the spaces. */
#boardtoday .dstrip .dt-n{overflow-wrap:break-word}

/* ---- Needs you today: a long go button no longer squeezes the title ----
   The row was a two-column grid: the title on the left, the go button
   beside it at its full width. A long button ("Los contactos de tu
   teléfono →", 200px) left the title ~90px at 375 wide, seven lines tall.
   Now the title keeps at least 10rem beside the button; when the button
   cannot fit next to that, it drops under the title, still on the right.
   The sentence and the list stay underneath, full width, as before. The
   title is centred on the 44px button, so a one-line title no longer sits
   at the top with an empty band under it. (Wins over ATT_CSS, which
   board.js injects after board.css, by starting at #boardtoday2.) */
#boardtoday2 .att .at{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;column-gap:.55rem;row-gap:.1rem}
#boardtoday2 .att .at>*{order:2;flex:1 1 100%;min-width:0}
#boardtoday2 .att .at>.at-t{order:0;flex:1 1 10rem}
#boardtoday2 .att .at>.b.sm{order:1;flex:0 0 auto;margin-left:auto;max-width:100%}

/* ---- Needs you today: the ▸/▾ fold mark stays with the last word ----
   It was an inline-block, so it could wrap onto a line of its own under a
   title that filled the line ("This month is pacing behind" / "▸"). As
   plain inline text it goes to the next line with the last word. */
#boardtoday2 .att .at-c{display:inline}

/* ----- fit round · 04-calendar · the Calendar card on Today: day rows, open lead link, counts line ----- */
/* ===== fit round · 04-calendar · 26 Sep 2026 =====
   Joe: "make sure all screens look perfectly". The Calendar card on Today.
   Every rule is scoped #boardtoday .jcal, so it cannot reach another card,
   and outranks the calendar's own injected sheets (CAL_CSS … CAL5_CSS,
   TELL_CSS, which land after board.css) and the calendar round's
   ".jcal …" rules above it on specificity, not on source order. */

/* The buttons under a day row (Call, Text to confirm, On my way, Move, Add
   to my calendar) only had the narrow middle column — about 222px on Joe's
   phone, 195px on a 375 — so in Spanish nearly every button sat alone on
   its own line ("Mover", then "Agregar a mi calendario"), and in English an
   estimate took three rows of buttons. The row is now a grid: the kind, the
   words and the × on the first line, exactly where they were, and the
   buttons on a line of their own across the whole row (about 319px on his
   phone). .jct-b is only a wrapper, so it steps aside (display:contents)
   and its two parts take their places in the grid. */
#boardtoday .jcal .jct-i{display:grid;grid-template-columns:3.6rem minmax(0,1fr) auto;
  column-gap:.65rem;row-gap:0;align-items:start}
#boardtoday .jcal .jct-i>.jct-b{display:contents}
#boardtoday .jcal .jct-i>.jce-k{grid-column:1;grid-row:1}
#boardtoday .jcal .jct-i .jct-txt{grid-column:2;grid-row:1;min-width:0}
#boardtoday .jcal .jct-i>.jct-x{grid-column:3;grid-row:1}
#boardtoday .jcal .jct-i .jc-acts{grid-column:1/-1;grid-row:2;min-width:0}

/* The underlined "open lead" link sat between two buttons on every
   callback row ("Call · open lead · Move"). It goes to the end of the
   row, after the buttons, where a text link reads as the quiet extra it is
   (the order on screen only; nothing moves in the page). */
#boardtoday .jcal .jct-i .jc-acts .linkish{order:1}

/* When a name ran to two lines ("Test Visit Today Two"), the mono time
   dropped to the middle of the two lines. The time and the name now share
   the first line's baseline, and the tick on his own appointment sits on
   that first line too. */
#boardtoday .jcal .jct-i .jct-h{align-items:baseline}
#boardtoday .jcal .jct-i .jct-h .jc-tick{align-self:flex-start}

/* The counts under the day heading ("20 THINGS · 2 JOBS · …") wrapped with
   a "·" at the start of the second line in Spanish and at the end of the
   first in English. The page's own " · " between the counts is hidden
   (font-size 0) and each count carries its dot in the gap before it; the
   strip at the left edge is clipped, so a count that starts a line starts
   clean. Same mono caps, same colours, same spacing as before. */
#boardtoday .jcal .jct-c{display:flex;flex-wrap:wrap;font-size:0;margin-left:-1.3rem;
  -webkit-clip-path:inset(0 0 0 1.3rem);clip-path:inset(0 0 0 1.3rem)}
#boardtoday .jcal .jct-c span{position:relative;margin-left:1.3rem;font-size:.6rem;line-height:1.6}
#boardtoday .jcal .jct-c span::before{content:"\B7";position:absolute;left:-.85rem;width:.4rem;text-align:center}

/* ----- fit round · 05-money · Business launcher tiles and the money drawers' back row ----- */
/* =============================================================================
   05-money — FIT ROUND, 26 Sep 2026. The Business tab's launcher (#lx: the
   tiles under MONEY IN / MONEY OUT / THE CREW / YOUR WEEK ...) and the money
   drawers it opens. Layout only: same tiles, marks, brackets and colours.
   Every rule is scoped under #lx (the tile grid) or #lxbar (the back row
   over an open drawer); board.js draws both only on the Business tab.
   ============================================================================= */

/* Business launcher: four tiles a row on every phone. At 430 wide the
   auto-fill grid drew five 74px tiles, so Spanish names broke in the middle
   of a word ("Contratand / o") or ran to four lines ("Los / contactos / de tu
   / teléfono") and the rows came out 78, 84 and 95px tall. 375 already had
   four a row; now 393, 402 and 430 match it. Tablets keep the auto-fill. */
@media (max-width:480px){
  #lx .lx-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
}

/* Business launcher: the mark sits 19px from the top of every tile (where a
   one-line tile always had it) and the name hangs under it. Before, a tile
   whose name wrapped ("Por qué perdemos", "Where work comes from") had its
   mark 6px higher than its neighbours, and the name's second line ran into
   the bottom-right corner bracket ("de tu teléfono", "Where work comes
   from"). A row of one-line names looks exactly as before (78px); a row
   holding a two-line name grows to 88px so that line clears the bracket. */
#lx .lx-t{justify-content:flex-start;padding-top:1.1875rem;padding-bottom:1rem}

/* The back row at the top of every open drawer (#lxbar): the button keeps
   its one line and the drawer's name beside it wraps instead. At 375 in
   Spanish, "Where work comes from" squeezed the button into two lines
   ("← Todas las / tarjetas"). Same for "← Back to cards" on the one-page
   view, which uses the same bar. */
#lxbar.lx-bar > .b{flex:0 0 auto;white-space:nowrap}

/* ----- fit round · 06-ops · Business: bills rows, Every day editor, month bars, the Save bar ----- */
/* =============================================================================
   06-ops — FIT ROUND (26 Sep 2026), Business tab, the other drawers
   (Money out, The crew, Your week, The numbers, Tools) and the Save bar.
   Appended to board.css. Every rule is scoped to one drawer's own markup.
   ============================================================================= */

/* ---- Bills: the bill row ----------------------------------------------------
   The look round's input rule (.bc input[type=date], 0,2,1) beat board 38's
   compact date box (.bl-d .bl-dt, 0,2,0), so the box grew to its full form
   size (~153px here, ~120px on the phone) and squeezed the bill's name into
   a 45-80px column: three to five lines, broken mid-word at 375
   ("Pay / wor / kers / com / p"). Each bill is now two lines: the tick, the
   name and the amount on top; the date box and the x under the name. The
   name gets the whole width, and the date box has room for 09/30/2026,
   30/09/2026 or the phone's "Sep 30, 2026" on every phone. */
.bc .blist2>.bl{display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  grid-template-areas:"tk n a" ". d x";column-gap:.6rem;row-gap:.3rem;
  align-items:center;padding:.5rem 0}
.bc .blist2>.bl>.tick{grid-area:tk}
.bc .blist2>.bl>.bl-n{grid-area:n;line-height:1.35}
.bc .blist2>.bl>.bl-a{grid-area:a;text-align:right;white-space:nowrap}
.bc .blist2>.bl>.bl-d{grid-area:d;justify-self:start;width:auto;max-width:100%;text-align:left}
/* the date box itself: the look round's navy input at its own .88rem, sized
   to its date (Chromium needs ~151px for 09/30/2026 + the calendar icon; the
   phone draws "Sep 30, 2026" in ~122px) */
.bc .blist2>.bl>.bl-d>.bl-dt{width:10rem;max-width:100%;min-height:44px;
  padding:.4rem .6rem;font-family:var(--mono);font-size:.88rem}
/* iPhone centres a date inside its box; keep it at the left like the name above */
.bc .blist2>.bl>.bl-d>.bl-dt::-webkit-date-and-time-value{text-align:left}
/* the x that deletes the bill: a 44px square under the amount, not a 27px sliver */
.bc .blist2>.bl>[data-bact="bdel"]{grid-area:x;justify-self:end;min-width:44px}
/* the 26px tick keeps its look; the thumb gets a 44px target around it */
.bc .blist2>.bl>.tick::before{content:"";position:absolute;top:-9px;right:-9px;bottom:-9px;left:-9px}

/* ---- Every day (and Scoreboard): "Change what these are" --------------------
   Each slot is a text box, a time box and Remove. Under ~400px the three do
   not fit on one line, so "Remove" dropped onto a line of its own at the left
   edge; at 402-430 they fit, but the task box was ~160px and cut its own
   words ("DASHBOARD 🧠🤖", "Something you do every day"). On a phone the
   task gets the first line and the time box + Remove share the second, and
   a little more air between slots keeps each slot's two lines together. */
@media (max-width:440px){
  .bc .bdet .blist>.brow>input[type=text]{flex:1 1 100%}
  .bc .bdet .blist>.brow>input[type=time]{flex:1 1 7rem}
  .bc .bdet .blist>.brow+.brow{margin-top:.85rem}
}

/* ---- Every day / Track record: the month bars -------------------------------
   The strips scroll sideways inside their own box, which at 375 left the last
   month half past the right edge with its number cut ("45" read "4"). The
   bars now share the strip's width, down to a narrower floor, so twelve (or
   eighteen) months show whole on a phone; a longer history still scrolls. */
.bc .hist>.hb{flex:1 1 0;min-width:1.05rem}
.bc .tr>.trb{flex:1 1 0;min-width:.8rem}

/* ---- the Save bar (appears after an edit, e.g. a bill's date) ---------------
   --tabh is the tab bar's measured height and already includes the home-bar
   inset (nav.tabs pads itself by it), so adding the inset again left the bar
   floating 34px above the tabs on a notched phone. And "Save now" wrapped to
   two lines beside the long "No connection" line: the button keeps one line,
   the message takes what is left and wraps. */
.bbar#bstatus{bottom:var(--tabh)}
.bbar#bstatus .m{flex:0 1 auto;min-width:0;line-height:1.5}
.bbar#bstatus .b{flex:0 0 auto;white-space:nowrap}

/* ----- fit round · 07-tabs · Calls, Jobs, Leads, Customers, Invoices + the sheet, Setup ----- */
/* =====================================================================
   07-tabs · fit round, 26 Sep 2026 — the Leads tab (the board's Leads card
   shown on its own, #leadsroot). Appended to board.css. Scoped to
   #leadsroot so the same card on the Business tab is left to its owner.
   ===================================================================== */

/* ---------- Leads: an open lead's one-tap buttons ----------
   "Why did we lose it?" and the call-back days broke their labels with one
   word alone on the second line ("Went with someone / else", "Todavía no
   están / listos", "Lo van a hacer / ellos"). Balanced lines instead; the
   tiles and their grid are unchanged. (#leadsroot: beats board.js's own
   injected .lz-why/.lz-next rules on specificity.) */
#leadsroot .lz-why .b,#leadsroot .lz-next .b{text-wrap:balance}

/* ----- fit round · 09-merge · integration: where two slices meet (save bar, print, jumps) ----- */
/* =====================================================================
   09-merge · fit round, 26 Sep 2026 — the integration lead's fixes where two
   slices meet. Appended to board.css after every slice.
   ===================================================================== */

/* ---------- Business: the Save bar when it has nothing to say ----------
   (02-fab ↔ 06-ops) Once "Saved" has had its two seconds, board.js repaints
   the bar as an empty <span class="m"></span>, so board.css's .bbar:empty
   no longer matched: a small empty navy chip stayed at the bottom right of
   the drawer, and the bar's see-through band sat over the corner of the Ask
   Jetsy button (which comes back as soon as the bar has no words). The bar
   now goes whenever it holds neither a message nor Save now. The first line
   is for a phone too old for :has(): the chip goes, the band stays. */
.bbar#bstatus .m:empty{display:none}
.bbar#bstatus:not(:has(> :not(:empty))){display:none}
