/* Box 12 Helper -- every page's base, and the working screens.

   THE SHOP FRONT (the sales page, signing in, terms) wears shopfront.css on
   top of this, generated by the JTS kit and scoped to body.shopfront.

   LIGHT, WITH ONE KRAFT-ENVELOPE BROWN. A W-2 season is paperwork read at a
   desk and often printed: the page is white paper and warm grey, the one
   colour is the brown of the envelope a W-2 comes in, and the loudest thing
   on any screen is a dollar figure. Red is kept for money that is wrong --
   overtime short, a flag to fix -- and for nothing else. (Never orange on
   black: JT, 2026-09-28.) The layout and the pieces are Drawline's, so the
   JTS tools work the same way under the hand. */

:root {
  --bg:          #f5f3f0;         /* the page: warm, very light grey */
  --surface:     #ffffff;         /* cards, tables */
  --surface-2:   #f2eee9;         /* header rows, totals */
  --surface-3:   #e9e2d9;         /* hover, the tab you are on */
  --line:        #e0d8ce;
  --field:       #cbbfb1;         /* the edge of a box you type in */
  --ink:         #1d1712;
  --dim:         #64574b;         /* 6.4:1 on white */
  --accent:      #7a4b1a;         /* kraft-envelope brown, 7.6:1 on white */
  --accent-soft: #f5ece2;         /* the brown, as a wash behind things */
  --on-accent:   #ffffff;
  --good:        #15803d;
  --warn:        #a16207;
  --bad:         #c52a2a;
  --r:           12px;
}

* { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  padding: 0 22px 90px;
  background: var(--bg);
  color: var(--ink);
  font: 15px/1.55 -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
}

a { color: var(--accent); }

h1, h2, h3 { line-height: 1.15; text-wrap: balance; }
.lead { font-size: 17px; max-width: 66ch; }
.tiny { font-size: 12.5px; }
.dim { color: var(--dim); }
.n { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.row-between { display: flex; gap: 10px 18px; align-items: flex-end;
               justify-content: space-between; flex-wrap: wrap; }
.row-between h2 { margin-bottom: 10px; }
.sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden;
           clip: rect(0 0 0 0); white-space: nowrap; }
[hidden] { display: none !important; }
.bad-text { color: var(--bad); }
.good-text { color: var(--good); }
code { font-size: 13px; background: var(--surface-2); padding: 1px 5px; border-radius: 5px; }

/* ---- the public header (layout.html) ------------------------------------ */
.top {
  max-width: 1180px;
  margin: 0 auto;
  padding: 16px 0 10px;
  display: flex;
  align-items: center;
  gap: 12px;
}
.brand { display: flex; align-items: center; gap: 9px; color: inherit;
         text-decoration: none; width: fit-content; }
.jts-mark { width: 30px; height: 30px; flex: none; }
.brand-name { font-weight: 700; }
.say-btn {
  margin-left: auto;
  color: var(--dim);
  text-decoration: none;
  font-size: 13px;
  font-weight: 600;
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 5px 12px;
}
.sf-nav { margin-left: auto; display: flex; align-items: center; gap: 8px;
          flex-wrap: wrap; justify-content: flex-end; }
.sf-nav a { color: var(--dim); text-decoration: none; font-size: 14px; }
.sf-nav .sf-tools { display: inline-flex; align-items: center; gap: 7px; }
.sf-nav .sf-tools svg { width: 16px; height: 16px; }
.cog { margin-left: 6px; text-decoration: none; font-size: 19px;
       color: var(--dim); padding: 2px 6px; }
.cog:hover { color: var(--ink); }
.cog.on { color: var(--accent); }

main { max-width: 1180px; margin: 0 auto; }

.pagehead { margin: 22px 0 10px; }
.pagehead h1 { margin: 0 0 4px; }
.crumb { margin: 18px 0 0; font-size: 14px; }

.card {
  background: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--r);
  padding: 20px 22px;
  margin: 18px 0;
}
.card h2 { margin: 0 0 10px; font-size: 20px; }
.card h3 { margin: 18px 0 6px; font-size: 16px; }
h2.sub { margin: 30px 0 4px; font-size: 20px; }
details.card > summary { cursor: pointer; }

/* ---- forms ---------------------------------------------------------------- */
.fld { display: flex; flex-direction: column; gap: 5px; margin: 0 0 14px;
       min-width: 0; border: 0; padding: 0; }
.fld-label { font-weight: 600; font-size: 14px; }
.fld-label i { font-style: normal; color: var(--dim); font-weight: 400; }
.fld-note { color: var(--dim); font-size: 13.5px; margin: 4px 0 14px; max-width: 62ch; }
.fld-row { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 220px), 1fr));
           gap: 0 16px; }
.radio-set { display: grid; gap: 8px; }

/* EVERY KIND OF BOX, including one with no type at all: `input[type=text]`
   does not match <input name="x">, which is how Shop Rate once shipped ten
   raw boxes on a page of a different colour. */
input[type=text], input[type=email], input[type=tel], input[type=password],
input[type=number], input[type=search], input[type=url], input[type=date],
input:not([type]), select, textarea {
  width: 100%;
  background: var(--surface);
  color: var(--ink);
  border: 1px solid var(--field);
  border-radius: 9px;
  padding: 9px 11px;
  font: inherit;
  min-width: 0;
}
input[type=file] { font: inherit; font-size: 14px; max-width: 100%; }
select { padding-right: 8px; }
textarea { min-height: 70px; resize: vertical; }
input:focus, select:focus, textarea:focus { outline: 2px solid var(--accent); outline-offset: 1px; }
input:disabled, select:disabled, textarea:disabled { opacity: .6; }
input[readonly] { background: var(--surface-2); }
.check { display: flex; align-items: flex-start; gap: 8px; font-size: 14.5px; cursor: pointer;
         margin: 0 0 10px; }
.check input { width: 18px; height: 18px; accent-color: var(--accent); flex: none; margin: 2px 0 0; }
.w-s { max-width: 90px; }
.w-m { max-width: 160px; }

button, .go {
  display: inline-block;
  background: var(--accent);
  color: var(--on-accent);
  border: 0;
  border-radius: 9px;
  padding: 10px 18px;
  font-family: inherit; font-size: 15px; font-weight: 600; line-height: 1.2;
  text-decoration: none;
  cursor: pointer;
}
button:disabled, .go[aria-disabled] { opacity: .45; cursor: not-allowed; }
button:focus-visible, .go:focus-visible, a:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
.btn-quiet, button.btn-quiet {
  display: inline-block;
  background: var(--surface);
  color: var(--ink);
  border: 1px solid var(--field);
  border-radius: 9px;
  padding: 8px 14px;
  font-family: inherit; font-size: 14px; font-weight: 600; line-height: 1.2;
  text-decoration: none;
  cursor: pointer;
}
.btn-quiet:hover { border-color: var(--accent); }
.danger, button.danger {
  background: none;
  color: var(--bad);
  border: 1px solid rgba(197, 42, 42, .45);
  border-radius: 9px;
  padding: 8px 14px;
  font-family: inherit; font-size: 14px; font-weight: 600; line-height: 1.2;
  cursor: pointer;
}
.danger:hover { background: rgba(197, 42, 42, .06); }
button.linkbtn {
  background: none; border: 0; padding: 0 2px; color: var(--accent);
  font-size: 13.5px; font-weight: 600; text-decoration: underline;
  text-underline-offset: 3px; cursor: pointer;
}
button.linkbtn.bad-text { color: var(--bad); }
.linkish { color: var(--dim); text-decoration: underline; text-underline-offset: 3px; }
.linkish:hover { color: var(--ink); }
form.inline { display: inline; margin: 0; }
.inline-form { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin: 12px 0 0; }
.inline-form input:not([type=file]):not([type=checkbox]):not([type=radio]),
.inline-form select { width: auto; flex: 1 1 160px; }
.inline-form .w-s { flex: 0 1 80px; }
.inline-form .w-m { flex: 0 1 160px; }
.stack { display: grid; gap: 8px; margin: 8px 0; justify-items: start; }
.stack input:not([type=file]), .stack select { width: 100%; }

/* ---- messages -------------------------------------------------------------- */
.warn {
  border-left: 4px solid var(--warn);
  background: rgba(161, 98, 7, .08);
  padding: 10px 14px;
  border-radius: 6px;
  margin: 0 0 14px;
}
.warn.bad { border-color: var(--bad); background: rgba(197, 42, 42, .07); }
.warn.good { border-color: var(--good); background: rgba(21, 128, 61, .08); }
.warn ul { margin: 6px 0 0; padding-left: 18px; }
.notice {
  max-width: 1180px;
  margin: 8px auto;
  padding: 9px 14px;
  border-radius: 8px;
  background: var(--surface-2);
  border: 1px solid var(--line);
  font-size: 14px;
}
.notice.warn-line { border-color: var(--warn); }
.dl-notice { color: var(--dim); font-size: 13px; max-width: 80ch; margin: 18px 0;
             padding: 10px 14px; border: 1px dashed var(--field); border-radius: 8px;
             background: var(--surface); }

/* ---- tables and pills -------------------------------------------------------- */
.scroll { overflow-x: auto; }
.tbl { border-collapse: collapse; width: 100%; font-size: 14px; }
.tbl th, .tbl td { padding: 8px 10px; border-bottom: 1px solid var(--line);
                   text-align: left; vertical-align: top; }
.tbl th { font-size: 12px; text-transform: uppercase; letter-spacing: .06em;
          color: var(--dim); font-weight: 600; }
/* Money lines up on the right, digit under digit. (.tbl td would otherwise
   win over .n and left-align every column of figures.) */
.tbl .n { text-align: right; }
.tbl tfoot th { background: var(--surface-2); color: var(--ink); font-size: 13px; }
.tbl.small { font-size: 13px; }
.tbl.small td, .tbl.small th { padding: 6px 8px; }
.tbl tr.row-bad td { background: rgba(197, 42, 42, .05); }
.desk section { margin: 26px 0; }
.desk .tbl td form { display: inline-flex; gap: 6px; align-items: center; margin: 0; }
.desk .tbl select { width: auto; padding: 5px 8px; font-size: 13px; }
.desk .tbl button { padding: 5px 10px; font-size: 13px; }
.pill {
  display: inline-block;
  border-radius: 999px;
  padding: 1px 9px;
  font-size: 12px;
  font-weight: 700;
  border: 1px solid var(--line);
  color: var(--dim);
  white-space: nowrap;
  vertical-align: middle;
}
.pill.new, .pill.trial, .pill.st-submitted { border-color: var(--accent); color: var(--accent); }
.pill.good, .pill.paying, .pill.comped, .pill.st-approved, .pill.st-paid { border-color: var(--good); color: var(--good); }
.pill.st-partially_paid { border-color: var(--warn); color: var(--warn); }
.pill.bad, .pill.lapsed, .pill.stopped, .pill.trialover, .pill.st-rejected { border-color: var(--bad); color: var(--bad); }
.plain-list { list-style: none; margin: 0; padding: 0; }
.plain-list li { padding: 8px 0; border-bottom: 1px solid var(--line); }
.plain-list li:last-child { border-bottom: 0; }

.foot { max-width: 1180px; margin: 60px auto 0; padding-top: 18px;
        border-top: 1px solid var(--line); }
.foot a { color: var(--dim); }

/* ===========================================================================
   THE OFFICE'S SCREENS
   =========================================================================== */
.app-top {
  max-width: 1320px;
  margin: 0 auto;
  padding: 14px 0 12px;
  display: flex;
  align-items: center;
  gap: 10px 16px;
  flex-wrap: wrap;
}
.app-brand { display: flex; align-items: center; gap: 10px; color: var(--ink);
             text-decoration: none; min-width: 0; }
.app-brand-words { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; }
.app-brand-words b { font-size: 16px; white-space: nowrap; overflow: hidden;
                     text-overflow: ellipsis; max-width: 42vw; }
.app-brand-words span { font-size: 12px; color: var(--accent); font-weight: 700;
                        letter-spacing: .08em; text-transform: uppercase; }
.app-nav { display: flex; gap: 4px; margin-left: 8px; margin-right: auto; }
.app-nav a {
  color: var(--dim);
  text-decoration: none;
  font-weight: 600;
  font-size: 14.5px;
  padding: 7px 12px;
  border-radius: 8px;
}
.app-nav a:hover { color: var(--ink); background: var(--surface-2); }
.app-nav a.on { color: var(--ink); background: var(--surface-3); }
.pay-link {
  color: var(--accent);
  text-decoration: none;
  font-size: 13.5px;
  font-weight: 600;
  border: 1px solid rgba(27, 58, 107, .35);
  border-radius: 8px;
  padding: 5px 11px;
}
.app-top .cog { margin-left: 0; }

.app-banner, .app-flash, .app-tip {
  max-width: 1320px;
  margin: 0 auto 12px;
  padding: 10px 14px;
  border-radius: 10px;
  font-size: 14.5px;
  border: 1px solid var(--line);
  background: var(--surface);
}
.app-banner { border-color: rgba(27, 58, 107, .3); background: var(--accent-soft); }
.app-banner.warn { border-color: rgba(197, 42, 42, .4); background: rgba(197, 42, 42, .06); }
.app-flash { border-color: rgba(21, 128, 61, .35); background: rgba(21, 128, 61, .07); }
.app-tip { border-color: rgba(27, 58, 107, .3); background: var(--accent-soft); margin: 12px 0; }
.app-main { max-width: 1320px; margin: 0 auto; }
.app-bg .foot { max-width: 1320px; }

.empty {
  text-align: center;
  padding: 44px 20px;
  border: 1px dashed var(--field);
  border-radius: var(--r);
  margin: 18px 0;
  background: var(--surface);
}
.empty h2 { margin: 0 0 6px; }

/* ---- figures: the money at the top of a page ---------------------------- */
.figs { display: grid; gap: 12px; margin: 16px 0;
        grid-template-columns: repeat(auto-fit, minmax(min(100%, 210px), 1fr)); }
.fig {
  display: flex; flex-direction: column; gap: 2px;
  background: var(--surface);
  border: 1px solid var(--line);
  border-top: 3px solid var(--accent);
  border-radius: 10px;
  padding: 14px 16px;
  color: var(--ink);
  text-decoration: none;
  min-width: 0;
}
a.fig:hover { border-color: var(--accent); }
.fig.bad { border-top-color: var(--bad); }
.fig.bad .fig-n { color: var(--bad); }
.fig-label { font-size: 12px; text-transform: uppercase; letter-spacing: .07em;
             color: var(--dim); font-weight: 700; }
.fig-n { font-size: clamp(22px, 2.6vw, 30px); font-weight: 800; letter-spacing: -.01em;
         font-variant-numeric: tabular-nums; line-height: 1.15; }
.fig .dim { font-size: 13px; }
.warn-card { border-color: rgba(197, 42, 42, .35); }

.jumps { display: flex; flex-wrap: wrap; gap: 6px; margin: 12px 0; }
.jumps a { font-size: 13.5px; font-weight: 600; color: var(--dim); text-decoration: none;
           border: 1px solid var(--line); background: var(--surface);
           border-radius: 999px; padding: 4px 11px; }
.jumps a:hover, .jumps a.on { color: var(--accent); border-color: var(--accent); }

.dl-first .dl-todo { margin: 6px 0 0; padding-left: 22px; }
.dl-todo li { margin: 0 0 10px; }
.dl-todo li.done { color: var(--dim); text-decoration: line-through; }

/* ---- the pay application ---------------------------------------------- */
.split { display: grid; gap: 0 18px; grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr);
         align-items: start; }
.split > .card { margin-top: 0; }
.dl-sum { font-variant-numeric: tabular-nums; }
.dl-sum td:first-child { width: 28px; color: var(--dim); font-weight: 700; }
.dl-sum tr.due td { font-weight: 800; font-size: 16px; background: var(--accent-soft);
                    border-top: 2px solid var(--accent); border-bottom: 2px solid var(--accent); }
.tbl.cont { font-size: 13.5px; }
.tbl.cont td, .tbl.cont th { padding: 6px 7px; }
.tbl.cont th { font-size: 11px; letter-spacing: .04em; }
.num-in { max-width: 130px; text-align: right; font-variant-numeric: tabular-nums;
          padding: 6px 8px !important; }
.tbl.cont td .linkbtn { display: block; margin: 3px 0 0 auto; font-size: 12px; }
.warns { margin: 12px 0 0; padding-left: 18px; color: var(--bad); }
.warns:empty { display: none; }
.howgot { margin: 12px 0 0; }
.howgot > summary { cursor: pointer; color: var(--accent); font-weight: 600; font-size: 14px; }
.howgot .trace th { text-transform: none; letter-spacing: 0; font-size: 13px; color: var(--ink);
                    width: 46%; }
.howgot .trace td { font-variant-numeric: tabular-nums; }
.send h2 { margin-bottom: 6px; }
.save-sum { color: var(--dim); font-size: 14px; }
.sov-check { font-weight: 600; }
.sov-edit input { padding: 6px 8px; }
.co-line td { color: var(--dim); }
.inline-edit { display: inline-block; text-align: left; }
.inline-edit > summary { cursor: pointer; color: var(--accent); font-weight: 600; font-size: 13.5px; }
.inline-edit[open] { display: block; margin: 6px 0; padding: 10px; border: 1px solid var(--line);
                     border-radius: 9px; background: var(--surface-2); }
.short-ask { border-left: 4px solid var(--warn); padding: 8px 14px; margin: 0 0 14px;
             background: rgba(161, 98, 7, .06); border-radius: 6px; }
.danger-zone { border-color: rgba(197, 42, 42, .25); }
.danger-zone details summary { cursor: pointer; font-weight: 600; margin: 12px 0 8px; }
.logo-preview { max-height: 60px; max-width: 220px; border: 1px solid var(--line);
                border-radius: 6px; padding: 4px; background: #fff; }
.copy-link { margin: 8px 0 4px; font-size: 13px; }
.copyable td { user-select: all; }

/* ---- certified payroll ------------------------------------------------- */
.cp-row h3 { margin: 0 0 8px; }
.cp-days { margin: 4px 0 12px; }
.cp-days th { text-transform: none; letter-spacing: 0; font-size: 12.5px; }
.cp-days tbody th { white-space: nowrap; color: var(--ink); }
.cp-days input.hrs { width: 64px; max-width: 64px; padding: 5px 6px !important;
                     text-align: right; font-variant-numeric: tabular-nums; }
.pair { display: flex; gap: 6px; }
.pair input { min-width: 0; }
.cp-figs { margin: 6px 0 8px; font-variant-numeric: tabular-nums; }
.cp-next { margin: 16px 0 8px; }
.cp-next .fld-label { display: block; margin-bottom: 6px; }
.cp-next input[type=date] { width: auto; flex: 0 0 auto; }
details.nowork { margin-top: 10px; }
details.nowork summary { cursor: pointer; }
details.nowork .row form { margin: 0; }
.stmt { align-items: flex-start; padding: 8px 10px; border-radius: 8px; margin: 0 0 6px; }
.stmt.needed { background: var(--accent-soft); }
.wd { padding: 10px 0 14px; border-bottom: 1px solid var(--line); margin-bottom: 10px; }

@media (max-width: 900px) {
  .split { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 640px) {
  body { padding: 0 14px 70px; }
  .app-nav { margin-left: 0; order: 3; width: 100%; }
  .card { padding: 16px; }
  .figs { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
}

/* ===========================================================================
   THE SALES PAGE'S OWN PIECES (the rest is shopfront.css)
   =========================================================================== */
.dl-steps { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px;
            grid-template-columns: repeat(auto-fit, minmax(min(100%, 250px), 1fr)); }
.dl-steps li {
  position: relative;
  border: 2px solid var(--line);
  border-radius: 14px;
  padding: 44px 18px 18px;
  background: var(--surface);
}
.dl-steps li::before {
  content: counter(list-item);
  position: absolute;
  top: 12px;
  left: 18px;
  font-weight: 800;
  font-size: 20px;
  color: var(--accent);
  font-variant-numeric: tabular-nums;
}
.dl-steps h3 { margin: 0 0 6px; font-size: 17px; }
.dl-steps p { margin: 0; color: var(--dim); }

.dl-show { display: grid; grid-template-columns: minmax(0, 460px) minmax(0, 1fr);
           gap: 28px 40px; align-items: start; }
/* The example sheet: white paper on the blueprint ground, the way a pay
   application actually leaves the office. */
.dl-sheet {
  margin: 0;
  background: #fff;
  color: var(--ink);
  border: 1px solid var(--line);
  border-radius: 6px;
  padding: 18px 18px 14px;
  box-shadow: 0 18px 50px rgba(17, 26, 43, .14);
  background-image: linear-gradient(var(--accent-soft) 1px, transparent 1px),
                    linear-gradient(90deg, var(--accent-soft) 1px, transparent 1px);
  background-size: 22px 22px;
}
.dl-sheet-head { display: flex; flex-direction: column; margin: 0 0 10px; }
.dl-sheet-head b { font-size: 18px; color: var(--accent); }
.dl-sheet-head span { font-size: 13px; color: var(--dim); }
.dl-sheet .dl-sum { background: rgba(255, 255, 255, .92); }
.dl-sheet figcaption { margin-top: 10px; }
body.shopfront .dl-sheet td, body.shopfront .dl-sheet th { font-size: 14px; }
.dl-points { display: grid; gap: 18px; }
.dl-points div { border-top: 2px solid var(--accent); padding-top: 12px; }
.dl-points b { display: block; margin: 0 0 4px; font-size: 17px; }
.dl-points p { margin: 0; color: var(--dim); }
.dl-plans { display: grid; gap: 14px; margin: 0 0 14px;
            grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr)); }
.dl-plan { border: 1px solid var(--line); border-radius: 12px; padding: 16px 18px;
           background: var(--surface); }
.dl-plan h3 { margin: 0 0 6px; }
.dl-plan .amount, .dl-price .amount { font-size: clamp(32px, 4vw, 46px); font-weight: 800;
                                      letter-spacing: -.02em; line-height: 1; margin: 0 0 6px; }
.dl-plan .amount small { font-size: 15px; font-weight: 600; color: var(--dim); letter-spacing: 0; }
.dl-price { display: grid; gap: 18px 36px;
            grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); align-items: start; }
.dl-price ul { margin: 0; padding-left: 18px; }
.dl-price li { margin: 0 0 6px; }
.dl-rule { border-left: 4px solid var(--accent); padding: 10px 14px;
           background: var(--surface-2); border-radius: 6px; margin-top: 0; }
.dl-start { max-width: 820px; }
.dl-contact { font-size: 15px; }
.dl-contact a { font-weight: 600; }
@media (max-width: 820px) {
  .dl-show { grid-template-columns: minmax(0, 1fr); }
}





/* ---- Box 12 Helper's own pieces ------------------------------------------ */
.pill.sev-fix { background: #fde8e8; color: var(--bad); border-color: #f3c4c4; }
.pill.sev-check { background: #fdf3dc; color: var(--warn); border-color: #ecd9a6; }
.pill.sev-cpa { background: var(--accent-soft); color: var(--accent); border-color: var(--line); }
.pill.sev-info { background: var(--surface-2); color: var(--dim); }
.locked { color: var(--dim); font-size: 13px; }
.buy-card { border-color: var(--accent); }
.buy-card h2 { margin-top: 0; }
.map-grid { display: grid; gap: 4px 14px; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
            margin-bottom: 12px; }
.map-grid .fld { margin: 0; }
.calc-weeks input { min-width: 70px; }
.calc-weeks select { min-width: 180px; }
.calc-out .figs { margin-top: 0; }
.calc-scope ul { margin: 0; padding-left: 18px; }
.calc-scope li { margin: 3px 0; }
.tbl tr.row-new td { background: #fffaf0; }
.add-row { margin-top: 12px; }
.add-row > summary, details.card > summary { cursor: pointer; }
.tbl.weeks td { vertical-align: top; }
.tbl.weeks .howgot { margin: 0; }
.plain-list.flags li { padding: 7px 0; }
.dl-todo li { margin: 6px 0; }
.linkbtn { background: none; border: 0; padding: 0; color: var(--accent); cursor: pointer;
           font: inherit; text-decoration: underline; }
.linkbtn:hover { color: var(--ink); }
.b12-trace td:first-child { width: auto; white-space: nowrap; padding-right: 12px; vertical-align: top; }
.b12-trace td { font-size: 14px; }


/* jts-more: written by jtsapps_site/kit/push_hublink.py */
/* The way out to the rest of the JTS tools, top of every app's Settings.
   Quiet -- it is a door, not a thing being sold, so it is outlined rather
   than filled and sits where the gear in the header already is. Its own
   colours: the six stylesheets do not share a button rule. */
/* NO NEGATIVE MARGIN. -8px pulled the button's box down over the
   <h1> by 4px -- harmless here because the button still won the
   hit test, but an overlapping box stealing a click is a fault
   this project has already chased once, and it is not worth
   carrying for four pixels. Measured clear at 1700 and 430 wide. */
.jts-more{display:flex;justify-content:flex-end;margin:0 0 2px}
.jts-more-btn{display:inline-block;text-decoration:none;
  padding:7px 14px;border-radius:8px;font-size:13px;font-weight:600;
  color:var(--accent,#7bc043);background:transparent;
  border:1px solid var(--line,#2b323c)}
.jts-more-btn:hover{border-color:var(--accent,#7bc043);
  background:rgba(127,127,127,.10)}
/* end jts-more */

/* ---- the first steps: one row per step, its button on the right ---------
   JT, 2026-10-04: "make the buttons to go do the tasks more visible". Each
   step is a row with a big number, what it is, and a real button. The NEXT
   step's button is the solid one; a step that is done says so and keeps a
   quiet button; a step that has to wait says what it waits for. */
.steps { list-style: none; margin: 14px 0 0; padding: 0; display: grid; gap: 10px; }
.step { display: grid; grid-template-columns: 40px minmax(0, 1fr) auto; gap: 4px 16px;
        align-items: center; padding: 14px 16px; border: 1px solid var(--line);
        border-radius: 12px; background: var(--surface); }
.step-n { width: 36px; height: 36px; border-radius: 50%; display: grid; place-items: center;
          font-weight: 800; font-size: 16px; background: var(--surface-2); color: var(--dim);
          border: 1px solid var(--line); }
.step-words b { display: block; font-size: 16px; margin-bottom: 2px; }
.step-words span { color: var(--dim); font-size: 14px; }
.step-do { justify-self: end; white-space: nowrap; }
.step-do .go { font-size: 16px; padding: 12px 22px; }
.step-wait { color: var(--dim); font-size: 13px; font-style: italic; }
.step.next { border: 2px solid var(--accent); background: var(--accent-soft);
             padding: 13px 15px; }
.step.next .step-n { background: var(--accent); color: var(--on-accent); border-color: var(--accent); }
.step.done .step-n { background: var(--good); color: #fff; border-color: var(--good); }
.step.done .step-words b { color: var(--dim); }
.step.later { opacity: .72; }
@media (max-width: 640px) {
  .step { grid-template-columns: 36px minmax(0, 1fr); }
  .step-do { grid-column: 1 / -1; justify-self: stretch; }
  .step-do .go, .step-do .btn-quiet { display: block; text-align: center; }
}
