/* Klever report site — one stylesheet, one system.

   It used to be three designs painted over each other: the paper letterhead,
   then a dark theme laid on top of it, then a "tighter" pass on top of that,
   each overriding the last. What a thing looked like depended on which of
   three rules won. This is the same identity — dark, teal, the instrument
   from 19 September — written once.

   HOW IT IS ORGANISED
     1  tokens          every colour, size and radius, named once
     2  base            page, type, the top bar
     3  shared parts    buttons, chips, lists, cards, inputs
     4  home            the deck, the day, instructions, reports, people
     5  sign in
     6  the form        sections, fields, yes/no, tables, the send bar
     7  chat
     8  the Chairman's page
     9  print          unchanged — the report as a document on letterhead
    10  the observatory the agents as a star system (sits before print)

   TYPE, AND WHY THREE FACES
     Archivo  everything a person reads to operate the site
     Source Serif  only what a person wrote to another person: an instruction,
                   the brief, a note — the parts that are letters, not labels
     Plex Mono  only figures that must line up: times, counts, money       */

/* ================================================================
   1  TOKENS
   ================================================================ */
:root{
  --bg:#060b0a;
  --bg-2:#0a1311;
  --card:#0e1816;
  --card-2:#13201d;
  --raise:#192a26;
  --field:#0a1311;

  --line:rgba(255,255,255,.065);
  --line-2:rgba(255,255,255,.11);
  --line-3:rgba(255,255,255,.18);

  --ink:#eef4f1;
  --ink-2:#c5d2cd;
  --mut:#8b9d97;
  --dim:#7f918b;

  --teal:#2aa58e;
  --teal-hi:#5fe0c6;
  --teal-ink:#032019;
  --teal-bg:rgba(95,224,198,.09);
  --teal-line:rgba(95,224,198,.30);

  --gold:#e3b547;
  --gold-bg:rgba(227,181,71,.11);
  --coral:#ee7c61;
  --coral-bg:rgba(238,124,97,.11);
  --coral-line:rgba(238,124,97,.38);

  --sans:"Archivo","Noto Sans Ethiopic",system-ui,-apple-system,"Segoe UI",sans-serif;
  --serif:"Source Serif 4","Noto Serif Ethiopic",Georgia,serif;
  --mono:"IBM Plex Mono","Noto Sans Ethiopic",ui-monospace,Consolas,monospace;

  --r-xs:7px;
  --r-s:10px;
  --r:14px;
  --r-l:20px;
  --top-h:58px;
  --tap:48px;
  --shadow:0 18px 44px rgba(0,0,0,.42);

  color-scheme:dark;
}

/* ================================================================
   2  BASE
   ================================================================ */
*{box-sizing:border-box}
html{background:var(--bg);-webkit-text-size-adjust:100%}
body{
  margin:0;min-height:100vh;
  background:
    radial-gradient(120% 50% at 50% -8%, #12221f 0%, rgba(6,11,10,0) 60%),
    var(--bg);
  background-attachment:fixed;
  color:var(--ink);
  font-family:var(--sans);font-size:16px;line-height:1.5;
  -webkit-font-smoothing:antialiased;
  padding-bottom:40px;
}
body[data-page="form"]{padding-bottom:120px}
.wrap{max-width:640px;margin:0 auto;padding:0 18px;width:100%}
[hidden]{display:none!important}
a{color:var(--teal-hi)}
button{font:inherit}
::selection{background:rgba(95,224,198,.28)}
:focus-visible{outline:2px solid var(--teal-hi);outline-offset:2px}

h1{
  font-family:var(--sans);font-size:26px;font-weight:700;letter-spacing:-.02em;
  line-height:1.15;margin:22px 0 6px;text-wrap:balance;color:var(--ink);
}
.sub{font-size:14.5px;color:var(--mut);margin:0 0 20px;font-weight:400}

/* ---------- the top bar ---------- */
.top{
  position:sticky;top:0;z-index:20;
  background:rgba(6,11,10,.78);
  -webkit-backdrop-filter:blur(14px) saturate(1.3);backdrop-filter:blur(14px) saturate(1.3);
  border-bottom:1px solid var(--line);
}
.top-in{
  max-width:640px;margin:0 auto;height:var(--top-h);padding:0 18px;
  display:flex;align-items:center;gap:8px;min-width:0;
}
.top-in > *{flex-shrink:0}
.top-in > a:first-child{display:flex;align-items:center;margin-right:2px}
/* the logo is a white PNG with no alpha; make it a deliberate plate */
.top img{
  height:30px;width:auto;display:block;background:#fff;
  border-radius:7px;padding:3px 6px;box-shadow:0 0 0 1px var(--line-2);
}
.top .spacer{flex:1}
/* a company with no logo file yet — its name, set as a wordmark on the same
   white plate (Rovestone, 17 Oct 2026; COMPANIES in forms.js) */
.top-in > a:first-child{text-decoration:none}
.top .brandword{
  height:30px;display:flex;align-items:center;background:#fff;color:#2b2926;
  border-radius:7px;padding:0 10px;box-shadow:0 0 0 1px var(--line-2);
  font:700 12.5px/1 var(--sans);letter-spacing:.2em;white-space:nowrap;
}

/* chat and the Chairman's page, one tap from anywhere */
.navbtn{
  width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  color:var(--mut);text-decoration:none;border:1px solid transparent;position:relative;
}
.navbtn svg{width:21px;height:21px;display:block}
.navbtn:hover{color:var(--ink);background:var(--card)}
.navbtn.on{color:var(--teal-hi);background:var(--teal-bg);border-color:var(--teal-line)}

.langtoggle{
  display:flex;padding:3px;border-radius:12px;background:var(--card);
  border:1px solid var(--line-2);
}
.langtoggle button{
  font-family:var(--sans);font-size:12.5px;font-weight:700;letter-spacing:.03em;
  min-width:44px;min-height:38px;
  padding:6px 10px;border:0;border-radius:9px;background:transparent;color:var(--mut);cursor:pointer;
}
.langtoggle button[aria-pressed="true"]{background:var(--teal-hi);color:var(--teal-ink)}

/* the Chairman's "Klever | Rovestone" switch, under his page's title (17 Oct 2026) */
.chco{display:inline-flex;padding:3px;border-radius:12px;background:var(--card);border:1px solid var(--line-2);margin:6px 0 4px;gap:2px;max-width:100%;overflow-x:auto;box-sizing:border-box}
.chco button{
  font-family:var(--sans);font-size:14px;font-weight:700;letter-spacing:.01em;
  min-width:44px;min-height:40px;padding:6px 14px;border:0;border-radius:9px;white-space:nowrap;flex:0 0 auto;
  background:transparent;color:var(--mut);cursor:pointer;
}
/* four companies on a narrow phone: one line, never "Lemi / Kura" (19 Oct 2026) */
@media (max-width:380px){.chco button{padding:6px 10px}}
.chco button[aria-pressed="true"]{background:var(--teal-hi);color:var(--teal-ink)}
body[data-page="chairman"] .codenote.chconote{text-align:left;margin:4px 0 12px;line-height:1.5}

.signoutbtn{
  display:flex;align-items:center;gap:7px;cursor:pointer;height:44px;min-width:44px;
  padding:0 10px 0 5px;border-radius:12px;background:var(--card);border:1px solid var(--line-2);
}
.signoutbtn .soinit{
  width:28px;height:28px;border-radius:9px;
  background:linear-gradient(160deg,#1f4a42,#12302b);color:var(--teal-hi);
  font-family:var(--sans);font-size:12.5px;font-weight:700;
  display:flex;align-items:center;justify-content:center;
}
.signoutbtn .sotext{font-size:12.5px;font-weight:600;color:var(--mut)}
.signoutbtn:active{background:var(--card-2)}
.signoutbtn.armed{border-color:var(--coral-line);background:var(--coral-bg)}
.signoutbtn.armed .soinit{background:var(--coral);color:#fff}
@media (max-width:480px){ .signoutbtn .sotext{display:none} .signoutbtn{padding:0 7px;justify-content:center} }

/* the Chairman's fold-out menu: only where the bar would not fit */
.navmore{display:none;position:relative}
.navmore > summary{list-style:none;cursor:pointer}
.navmore > summary::-webkit-details-marker{display:none}
.navmore svg{stroke-width:3.2}
.navmore[open] > summary{color:var(--teal-hi);background:var(--teal-bg);border-color:var(--teal-line)}
.navmenu{
  position:absolute;right:0;top:calc(100% + 8px);z-index:30;min-width:210px;
  display:flex;flex-direction:column;gap:4px;padding:8px;
  background:var(--card);border:1px solid var(--line-2);border-radius:var(--r);
  box-shadow:0 12px 30px rgba(0,0,0,.45);
}
.navitem{
  display:flex;align-items:center;gap:12px;min-height:44px;padding:0 12px;border-radius:10px;
  color:var(--ink-2);text-decoration:none;font-size:14.5px;font-weight:600;
}
.navitem svg{width:20px;height:20px;flex-shrink:0}
.navitem.on,.navitem:hover{background:var(--teal-bg);color:var(--teal-hi)}
.langtoggle.infold{display:none;align-self:flex-start;margin:4px 4px 2px}
/* five pages of his (6 Oct 2026: Leads & jobs) — below 560 px three fold */
@media (max-width:560px){
  .top-in.chair .navbtn.fold{display:none}
  .top-in.chair .navmore{display:block}
}
@media (max-width:360px){
  .top-in.chair > .langtoggle{display:none}
  .top-in.chair .langtoggle.infold{display:flex}
}

/* the date, in both calendars, as the letters date themselves */
.lh{
  display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:16px 0 0;margin:0;
}
.lh-mark{display:none}
.lh-date{display:flex;flex-wrap:wrap;gap:2px 10px;font-size:12.5px;color:var(--mut);line-height:1.5}
.lh-date span:nth-child(2){color:var(--teal-hi)}
.lh-date span:nth-child(2)::before{content:'·';color:var(--dim);margin-right:10px}

.booting{
  font-size:13px;color:var(--dim);margin:56px 0;text-align:center;letter-spacing:.04em;
  animation:breathe 1.6s ease-in-out infinite;
}
@keyframes breathe{50%{opacity:.35}}

.foot{
  font-size:12px;color:var(--dim);text-align:center;margin:40px auto 0;line-height:1.65;
  max-width:420px;
}

/* ================================================================
   3  SHARED PARTS
   ================================================================ */

/* ---------- the section label ---------- */
.eyebrow,
.codelab,
.chsec,
.chfl,
.chtl,
.reprowhead .idx,
fieldset legend{
  font-family:var(--sans);font-size:11.5px;font-weight:700;letter-spacing:.11em;
  text-transform:uppercase;line-height:1.3;
}
.eyebrow{
  display:flex;align-items:center;gap:12px;
  color:var(--teal-hi);margin:34px 0 12px;
}
h2.eyebrow{font-family:var(--sans);font-size:11.5px;font-weight:700}
/* a heading for screen readers alone */
.vh{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.eyebrow::after{content:'';flex:1;height:1px;background:var(--line-2)}
.eyebrow:first-child{margin-top:24px}

/* ---------- buttons ---------- */
.btn,.codego,.deck-go,.next-go{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  min-height:var(--tap);padding:0 20px;border-radius:var(--r);
  font-family:var(--sans);font-size:15.5px;font-weight:700;letter-spacing:.005em;
  background:linear-gradient(180deg,var(--teal-hi),var(--teal));color:var(--teal-ink);
  border:0;cursor:pointer;text-decoration:none;white-space:nowrap;
  box-shadow:0 8px 22px rgba(42,165,142,.26), inset 0 1px 0 rgba(255,255,255,.25);
  transition:transform .08s ease, opacity .15s ease;
}
.btn:active,.codego:active,.deck-go:active,.next-go:active{transform:translateY(1px)}
.btn:disabled,.codego:disabled{
  background:var(--raise);color:var(--dim);box-shadow:none;cursor:not-allowed;
}
.btn.ghost{
  background:var(--card);color:var(--ink-2);border:1px solid var(--line-2);box-shadow:none;
  padding:0 14px;font-weight:600;
}
.btn.ghost:hover{border-color:var(--line-3);color:var(--ink)}

.seed,.chmini,.insgo,.addrow{
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  min-height:38px;padding:0 14px;border-radius:var(--r-s);cursor:pointer;
  font-family:var(--sans);font-size:13.5px;font-weight:600;
  background:var(--teal-bg);color:var(--teal-hi);border:1px solid var(--teal-line);
}
.seed:hover,.chmini:hover,.insgo:hover{background:rgba(95,224,198,.15)}
.seed:disabled,.chmini:disabled,.insgo:disabled{opacity:.45;cursor:not-allowed}
.seed{margin:0 0 18px}
.chmini.bad{background:var(--coral-bg);color:var(--coral);border-color:var(--coral-line)}

.backlink{
  display:inline-flex;align-items:center;gap:6px;margin:16px 0 0;
  font-family:var(--sans);font-size:13.5px;font-weight:600;color:var(--mut);
  text-decoration:none;padding:7px 12px 7px 9px;border-radius:999px;
  background:var(--card);border:1px solid var(--line-2);cursor:pointer;
}
.backlink:hover{color:var(--ink);border-color:var(--line-3)}

/* ---------- inputs ---------- */
/* time boxes too (12 Oct 2026): left out, "Start time" and "Finish time" in
   a list came out grey and small — the phone's own style — and Ashenafi's
   arrival time was a 24 px box in 13 px type that an iPhone zooms into */
input[type="text"],input[type="number"],input[type="date"],input[type="password"],input[type="time"],
textarea,select{
  font-family:var(--sans);font-size:16px;color:var(--ink);
  background:var(--field);border:1px solid var(--line-2);border-radius:var(--r-s);
  padding:0 12px;min-height:46px;width:100%;min-width:0;
  transition:border-color .15s ease, box-shadow .15s ease;
}
input[type="number"]{
  font-family:var(--mono);font-variant-numeric:tabular-nums;text-align:right;
  -moz-appearance:textfield;appearance:textfield;
}
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
textarea{padding:11px 12px;min-height:84px;resize:vertical;line-height:1.5}
select{
  -webkit-appearance:none;appearance:none;padding-right:36px;cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%238b9d97' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 13px center;
}
input::placeholder,textarea::placeholder{color:var(--dim)}
input:focus,textarea:focus,select:focus{
  outline:none;border-color:var(--teal-hi);box-shadow:0 0 0 3px rgba(95,224,198,.16);
}
/* which of the required fields is the empty one — on only after he asks */
input.miss,textarea.miss,select.miss{
  border-color:var(--coral);box-shadow:0 0 0 3px rgba(238,124,97,.14);
}
/* a `must` box (forms.js): the report does not go until it is filled */
input.mustgap,textarea.mustgap,select.mustgap{
  border-color:var(--coral);box-shadow:0 0 0 3px rgba(238,124,97,.14);
}
.repwrap.mustgap .replabel{color:var(--coral)}

/* ---------- a grouped list: rows on one card ---------- */
.reports,.people,.chanlist,.dayl{
  display:flex;flex-direction:column;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-l);
  overflow:hidden;margin:0 0 8px;
}
.report,.person,.chan,.dayln{
  display:flex;align-items:center;gap:13px;width:100%;text-align:left;
  padding:14px 16px;border:0;border-bottom:1px solid var(--line);
  background:transparent;color:inherit;text-decoration:none;cursor:pointer;font:inherit;
  transition:background .12s ease;
}
.report:last-child,.person:last-child,.chan:last-child,.dayln:last-child{border-bottom:0}
.report:hover,.person:hover,.chan:hover,.dayln:hover{background:rgba(255,255,255,.025)}
.report:active,.person:active,.chan:active,.dayln:active{background:rgba(255,255,255,.05)}

/* the little chevron that says "this opens" */
.report::after,.person .arrow,.chan .arrow{
  color:var(--dim);font-size:18px;line-height:1;flex:none;
}
.report::after{content:'›'}
.person .arrow,.chan .arrow{font-size:0}
.person .arrow::after,.chan .arrow::after{content:'›';font-size:18px}

.report .rt{font-size:15px;font-weight:600;line-height:1.3;flex:1;min-width:0;color:var(--ink)}
.report{align-items:center}
.report .meta{
  display:flex;flex-direction:column;align-items:flex-end;gap:1px;flex:none;max-width:48%;
  font-size:12px;color:var(--mut);text-align:right;line-height:1.35;
}
.report .meta span:not(.due){display:none}
/* a weekly report made from the daily ones: read, not filled */
.report.built .rt{color:var(--mut);font-weight:500}
.report.built .meta .due{color:var(--dim)}
.preview.built{max-height:none;color:var(--ink)}

.person .initial,.chan .chinit{
  width:36px;height:36px;flex:none;border-radius:11px;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(160deg,#1d423b,#12302b);
  color:var(--teal-hi);font-weight:700;font-size:14.5px;
}
.person .who,.chan .who{flex:1;min-width:0}
.person .nm,.chan .nm{display:block;font-size:15px;font-weight:600;line-height:1.3;color:var(--ink)}
.person .rl,.chan .rl{
  display:block;font-size:12.5px;color:var(--mut);line-height:1.35;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:400;
}
.chan .rl.lastmsg{color:var(--ink-2)}
.person .count{
  flex:none;font-size:11px;font-weight:700;letter-spacing:.04em;white-space:nowrap;
  color:var(--gold);background:var(--gold-bg);padding:4px 9px;border-radius:999px;
}

/* ---------- the reading card, for things people wrote ---------- */
.says{font-family:var(--serif);font-size:16.5px;line-height:1.6;color:var(--ink-2)}

/* ---------- toast ---------- */
.toast{
  position:fixed;left:50%;transform:translate(-50%,8px);bottom:104px;z-index:40;
  background:var(--ink);color:var(--bg);font-size:14px;font-weight:600;
  padding:10px 18px;border-radius:999px;opacity:0;pointer-events:none;
  box-shadow:0 10px 30px rgba(0,0,0,.45);transition:opacity .2s ease, transform .2s ease;
  max-width:calc(100vw - 36px);text-align:center;
}
.toast.on{opacity:1;transform:translate(-50%,0)}

/* ---------- expand-to-see ---------- */
.everyone{margin:10px 0 8px}
.everyone summary,.chmonth summary{
  display:flex;align-items:center;gap:8px;cursor:pointer;list-style:none;
  padding:13px 16px;border-radius:var(--r);background:var(--card);border:1px solid var(--line);
  font-size:13px;font-weight:600;color:var(--mut);
}
.everyone summary::-webkit-details-marker,.chmonth summary::-webkit-details-marker{display:none}
.everyone summary::after,.chmonth summary::after{
  content:'';margin-left:auto;width:8px;height:8px;border-right:2px solid var(--dim);
  border-bottom:2px solid var(--dim);transform:rotate(45deg) translateY(-3px);transition:transform .15s ease;
}
.everyone[open] summary::after,.chmonth[open] summary::after{transform:rotate(-135deg) translateX(-2px)}
.everyone .people{margin-top:10px}

/* ================================================================
   4  HOME
   ================================================================ */

/* ---------- the deck: one number, one button ---------- */
.deck{
  position:relative;text-align:center;padding:22px 20px 20px;margin:14px 0 8px;
  background:
    radial-gradient(90% 60% at 50% 0%, rgba(95,224,198,.10), rgba(95,224,198,0) 70%),
    linear-gradient(170deg,var(--card-2) 0%,var(--card) 70%);
  border:1px solid var(--line-2);border-radius:24px;box-shadow:var(--shadow);
  overflow:hidden;
}
.deck::before{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05);
}
.deck-who{margin-bottom:16px}
.deck-nm{display:block;font-size:18px;font-weight:700;letter-spacing:-.01em;color:var(--ink)}
.deck-rl{
  display:block;font-size:10.5px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--dim);margin-top:4px;
}
.deck-clear{font-family:var(--serif);font-size:17px;color:var(--mut);margin:24px 0 10px}

.dial{position:relative;width:128px;height:128px;margin:0 auto 16px}
.ringwrap{display:block;width:128px;height:128px;filter:drop-shadow(0 0 16px rgba(95,224,198,.25))}
.dial.late .ringwrap{filter:drop-shadow(0 0 16px rgba(238,124,97,.3))}
.dial-mid{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1}
.dial-n{
  font-size:44px;font-weight:700;letter-spacing:-.04em;color:var(--ink);
  font-variant-numeric:tabular-nums;
}
.dial.late .dial-n{font-size:25px;color:var(--coral);letter-spacing:-.02em}
.dial-u{font-size:9.5px;font-weight:700;letter-spacing:.17em;text-transform:uppercase;color:var(--dim);margin-top:6px}
.dial-s{font-family:var(--mono);font-size:12px;color:var(--mut);margin-top:4px}

.deck-w{font-size:18.5px;font-weight:700;letter-spacing:-.015em;line-height:1.25;margin:0 0 6px;color:var(--ink);text-wrap:balance}
.deck-t{font-family:var(--mono);font-size:12px;color:var(--mut);margin:0 0 18px;letter-spacing:.01em}
.deck-go{display:flex;width:100%;min-height:52px;font-size:16px;border-radius:15px}
.deck-go.late{
  background:linear-gradient(180deg,#f39a82,var(--coral));color:#2b0d06;
  box-shadow:0 8px 22px rgba(238,124,97,.28), inset 0 1px 0 rgba(255,255,255,.25);
}
.deck-more{font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);margin:14px 0 0}

/* ---------- the day, as a run of lights ---------- */
.tl{
  position:relative;margin:0 0 8px;padding:6px 16px;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-l);
}
.tlrow{display:flex;align-items:flex-start;gap:13px;padding:11px 0;text-decoration:none;color:inherit;position:relative}
.tlrow + .tlrow,.tlgroup + .tlrow,.tlrow + .tlgroup,.tlgroup + .tlgroup{border-top:1px solid var(--line)}
.tled{position:relative;width:10px;flex:none;align-self:stretch;display:flex;justify-content:center}
.tled i{
  position:relative;margin-top:6px;width:9px;height:9px;border-radius:50%;
  background:var(--bg);border:1.5px solid var(--line-3);
}
.tlrow.soon .tled i,.tlgroup.soon .tled i{background:var(--gold);border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-bg),0 0 12px rgba(227,181,71,.5)}
.tlrow.gone .tled i,.tlgroup.gone .tled i{background:var(--coral);border-color:var(--coral);box-shadow:0 0 0 3px var(--coral-bg),0 0 12px rgba(238,124,97,.5)}
.tlbody{flex:1;min-width:0}
.tlt{display:block;font-family:var(--mono);font-size:11.5px;color:var(--dim);letter-spacing:.02em}
.tlw{display:block;font-size:14.5px;font-weight:600;color:var(--ink);line-height:1.3;margin-top:2px}
.tlrow.gone .tlw{color:var(--coral)}
.tlp{display:block;font-size:12px;color:var(--mut);margin-top:1px}
.tls{
  font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  color:var(--dim);white-space:nowrap;margin-top:5px;font-variant-numeric:tabular-nums;
}
.tlrow.soon .tls,.tlgroup.soon .tls{color:var(--gold)}
.tlrow.gone .tls,.tlgroup.gone .tls{color:var(--coral)}

/* many reports at the same minute, as one row that opens */
.tlgroup summary{display:flex;align-items:flex-start;gap:13px;padding:11px 0;cursor:pointer;list-style:none}
.tlgroup summary::-webkit-details-marker{display:none}
.tlgroup .tlw::after{content:' ›';color:var(--dim);font-weight:400}
.tlgroup[open] .tlw::after{content:' ⌄'}
.tlgroup .tlsub{padding:0 0 8px 23px}
.tlgroup .tlsub a{
  display:flex;justify-content:space-between;gap:10px;padding:7px 0;
  font-size:13px;color:var(--ink-2);text-decoration:none;border-top:1px dashed var(--line);
}
.tlgroup .tlsub a span:last-child{color:var(--mut);text-align:right}

/* ---------- what the Chairman asked for, on the person's own home ---------- */
.inswrap:empty{display:none}
/* notifications on this phone */
.pushcard{margin:0 0 18px;padding:14px 16px;background:var(--card);border:1px solid var(--line);border-radius:var(--r)}
.pushcard:empty{display:none}
.pushcard.on{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 14px}
.pushhead{font-size:14.5px;font-weight:700;color:var(--ink);margin:0 0 4px}
.pushline{font-size:13.5px;color:var(--teal-hi);margin:0;flex:1;min-width:160px}
.pushnote{font-size:13px;color:var(--mut);line-height:1.5;margin:4px 0 0;width:100%}
.pushnote.bad{color:var(--coral)}
.pushbtn{margin-top:10px;min-height:44px;padding:0 18px;border-radius:var(--r-s);border:0;font-weight:700;font-size:14px;cursor:pointer;
  background:linear-gradient(180deg,var(--teal-hi),var(--teal));color:var(--teal-ink)}
.pushbtn.ghost{margin-top:0;min-height:38px;background:transparent;border:1px solid var(--line-2);color:var(--ink-2);font-weight:600}
.pushbtn:disabled{opacity:.6}
.ins{
  position:relative;background:var(--card);border:1px solid var(--line);border-radius:var(--r-l);
  padding:16px 16px 14px 20px;margin:0 0 10px;overflow:hidden;
}
.ins::before{content:'';position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--teal-hi)}
.ins.over::before{background:var(--coral)}
.inst{font-family:var(--serif);font-size:17px;line-height:1.45;color:var(--ink);white-space:pre-line}
.insd{font-family:var(--mono);font-size:12px;color:var(--mut);margin:6px 0 12px}
.ins.over .insd{color:var(--coral)}
.insbox{display:flex;flex-direction:column;gap:9px}
.insbox .insgo{align-self:flex-start;background:linear-gradient(180deg,var(--teal-hi),var(--teal));color:var(--teal-ink);border:0}
/* a report that keeps not coming (app.js nagCard): the days it was not sent, and a way in */
.nag .insd{margin-bottom:4px}
.nag .mfhow{margin-bottom:2px}
.nagbtn{display:inline-flex;align-items:center;text-decoration:none}
/* collections to fix (Ephrata's home): each payment, both figures, a tap for either, a box for the real one */
.mfhow{font-size:13.5px;color:var(--ink-2);line-height:1.5;margin:6px 0 10px}
.mfitem{border-top:1px solid var(--line);padding:10px 0 12px}
.mfcust{font-weight:700;font-size:14.5px;color:var(--ink)}
.mfsaid{font-size:13.5px;color:var(--ink-2);margin:2px 0 8px;line-height:1.45}
.mfline{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.mfpick{min-height:40px;padding:0 12px;border-radius:999px;cursor:pointer;font:600 13px var(--sans);
  background:var(--field);border:1px solid var(--line-2);color:var(--ink)}
.mfpick:hover{border-color:var(--teal-line)}
.mfpick:active{background:var(--teal-bg)}
.mfbox{flex:1 1 140px;min-width:0;min-height:42px;font-family:var(--mono)}
/* receipts to confirm (Selam): the tap she chose stays lit */
.rcpick.on{background:var(--teal-bg);border-color:var(--teal-hi);color:var(--ink)}
.rcpick.rc_no.on{background:transparent;border-color:var(--coral);color:var(--coral)}
.rcdup{font-size:12.5px;color:var(--coral);margin:-4px 0 8px;line-height:1.4}
.rcwaitline{color:var(--dim)}
/* payment slip photos (app.js slipCell / slipButtons / slipView) */
.rcnoslip{font-size:12.5px;color:var(--dim);margin:-4px 0 8px}
.slipbtns{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 8px}
.jmwait .slipbtns,.jmparts .slipbtns{margin:4px 0 2px}
.slipbtn{min-height:36px;padding:0 12px;border-radius:999px;cursor:pointer;font:600 12.5px var(--sans);
  background:var(--field);border:1px solid var(--teal-line);color:var(--teal-hi)}
.slipbtn:active{background:var(--teal-bg)}
.slipitem{position:relative}
.slipitem img{cursor:zoom-in}
.slipx{position:absolute;top:2px;right:2px;width:30px;height:30px;border-radius:50%;border:0;cursor:pointer;
  background:rgba(0,0,0,.6);color:#fff;font-size:18px;line-height:1}
.slipview{position:fixed;inset:0;z-index:1000;background:rgba(0,0,0,.9);display:flex;align-items:center;
  justify-content:center;padding:56px 12px 12px;cursor:zoom-out}
.slipview img{width:100%;height:100%;object-fit:contain}
.slipview .slipclose{position:absolute;top:10px;right:10px}
.slipmsg{color:#fff;font-size:15px}
/* office check-in at the door (app.js atScanCard / attendCard, Attend.js) */
.atscan.good::before,.ins.at.good::before{background:var(--teal-hi)}
.atscan.late::before,.ins.at.late::before{background:var(--gold)}
.atscan.bad::before,.ins.at.missing::before{background:var(--coral)}
.atbig{font-family:var(--serif);font-size:20px;line-height:1.35;color:var(--ink)}
.atscan.good .atbig{color:var(--teal-hi)}
.atscan.bad .atbig{color:var(--coral)}
.atsub{font-size:13.5px;color:var(--ink-2);margin-top:6px;line-height:1.45;overflow-wrap:anywhere}
.atcard{display:block}
.atask{margin-top:10px;display:grid;gap:8px}
.atq{font-weight:700;font-size:14px;color:var(--ink)}
.atpicks{display:flex;flex-wrap:wrap;gap:6px}
.atpicks .mfpick.on{background:var(--teal-bg);border-color:var(--teal-hi);color:var(--ink)}
.atnote{width:100%;box-sizing:border-box;font-family:var(--sans)}
.chattend{display:grid;gap:8px}
.atwifi{display:grid;gap:8px}
.atwifi .mfpick{justify-self:start}
.atfail{display:flex;flex-wrap:wrap;gap:8px;align-items:center;background:var(--card);border:1px solid var(--line-2);border-radius:var(--r);padding:10px 12px}
.atfailtxt{flex:1 1 220px;min-width:0;font-size:13px;color:var(--ink);overflow-wrap:anywhere}
.atfail .pushbtn,.atwifi .pushbtn{margin:0}
.atfailhow{flex:1 1 100%;font-size:12.5px;color:var(--mut);line-height:1.45}
.atthis.armed,.atwifi .mfpick.armed{outline:2px solid var(--coral);outline-offset:2px}
.atcounts{font-size:13.5px;color:var(--mut);margin:0}
.atrow .chfv.at{white-space:normal;text-align:right;overflow-wrap:anywhere}
.atrow .chfv.at.good{color:var(--teal-hi)}
.atrow .chfv.at.late{color:var(--gold)}
.atrow .chfv.at.none{color:var(--coral)}
.atperson>summary{cursor:pointer;padding:6px 0;color:var(--ink);font-size:13.5px}
.atline{font-size:12.5px;color:var(--mut);padding:2px 0 2px 12px;overflow-wrap:anywhere}
/* the person's own month (app.js atMonth) */
.attiles{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:10px 0 6px}
.attile{background:var(--field);border:1px solid var(--line-2);border-radius:var(--r);padding:8px 6px;text-align:center}
.attn{font-family:var(--serif);font-size:24px;line-height:1.1;color:var(--ink)}
.attl{font-size:12px;color:var(--mut);margin-top:2px}
.attile.good .attn{color:var(--teal-hi)}
.attile.late .attn{color:var(--gold)}
.attile.missed .attn{color:var(--coral)}
.atcountline{font-size:13px;color:var(--mut);margin:4px 0 8px}
.atdays{display:grid}
.atdl{display:grid;grid-template-columns:1fr auto;gap:2px 10px;padding:8px 0;border-top:1px solid var(--line);font-size:14px;align-items:baseline}
.atdd{color:var(--ink);display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;min-width:0}
.attoday{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--teal-hi)}
.atds{font-weight:700;text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.atdw{grid-column:1 / -1;font-size:12.5px;color:var(--mut);overflow-wrap:anywhere}
.atdl.good .atds{color:var(--teal-hi)}
.atdl.late .atds{color:var(--gold)}
.atdl.missed .atds{color:var(--coral)}
.atdl.none .atds,.atdl.off .atds{color:var(--dim);font-weight:500}
.atdl.off .atdd{color:var(--dim)}
.atdl.today{background:var(--teal-bg);margin:0 -10px;padding:8px 10px;border-radius:8px}
.insgo:disabled{opacity:.45;cursor:default}
.ins.mf.done::before{background:var(--teal-hi)}
.ins.mf.done .inst{font-family:var(--sans);font-size:15px;color:var(--teal-hi)}

/* ---------- the older home parts, still used on the Chairman's roster ---------- */
.next{background:var(--card);border:1px solid var(--line-2);border-radius:var(--r-l);padding:18px;margin:0 0 20px}
.next-k{font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--teal-hi);margin:0 0 8px}
.next.late .next-k{color:var(--coral)}
.next-n{font-family:var(--mono);font-size:42px;line-height:1;margin:0;color:var(--ink)}
.next-n s{text-decoration:none;font-size:15px;color:var(--mut);margin-left:6px}
.next-w{font-size:17px;font-weight:700;margin:10px 0 3px}
.next-t{font-size:12.5px;color:var(--mut);margin:0}
.next-go{display:flex;margin-top:14px}
.dayln .dtm{font-family:var(--mono);font-size:12px;color:var(--mut);width:64px;flex:none}
.dayln .dtx{flex:1;min-width:0}
.dayln .dtx b{display:block;font-size:14.5px;font-weight:600}
.dayln .dtx span{font-size:12px;color:var(--mut)}
.dayln .dfl{font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}
.dayln.soon .dfl{color:var(--gold)}
.dayln.gone .dfl,.dayln.gone .dtx b{color:var(--coral)}

/* the chat card stands alone on the home screen, so it carries its own card */
.chan.chatcard{background:var(--card);border:1px solid var(--line);border-radius:var(--r-l)}
.chatcard .chinit{font-size:0}
.chatcard .chinit svg{width:19px;height:19px}

.designlink{
  display:block;text-align:center;margin:14px 0 0;padding:12px;
  font-size:13px;font-weight:600;color:var(--dim);text-decoration:none;
  border:1px dashed var(--line-2);border-radius:var(--r);
}
.designlink:hover{color:var(--teal-hi);border-color:var(--teal-line)}

/* ================================================================
   5  SIGN IN
   ================================================================ */
.signin{
  margin:18px 0 0;padding:24px 20px 20px;border-radius:24px;
  background:linear-gradient(170deg,var(--card-2),var(--card));
  border:1px solid var(--line-2);box-shadow:var(--shadow);
}
.signin h1{margin:0 0 4px;font-size:28px}
.signin .sub{margin:0 0 22px}
.codelab{display:block;color:var(--mut);margin:0 0 8px}
.signfield,.chatfield select,.chatfield input{min-height:52px;font-size:16.5px;margin-bottom:18px}
.chatfield{display:block}
.chatfield .codelab{margin-bottom:8px}
.codeerr{
  color:var(--coral);font-size:14px;margin:-6px 0 14px;padding:10px 12px;
  background:var(--coral-bg);border-radius:var(--r-s);
}
.codego{width:100%;min-height:54px;font-size:16.5px;margin-top:4px}
.codenote{font-size:13px;color:var(--mut);margin:16px 0 0;line-height:1.55}
.codepath{
  display:block;margin-top:12px;font-family:var(--mono);font-size:12.5px;
  background:var(--field);border:1px solid var(--line-2);border-radius:var(--r-s);padding:9px 11px;
  color:var(--ink-2);word-break:break-all;
}

/* ================================================================
   6  THE FORM
   ================================================================ */
.formhead{
  margin:14px 0 14px;padding:20px 18px 18px;border-radius:var(--r-l);
  background:linear-gradient(170deg,var(--card-2),var(--card));
  border:1px solid var(--line-2);position:relative;overflow:hidden;
}
.formhead::before{content:'';position:absolute;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,var(--teal-hi),var(--teal))}
.formhead h1{margin:0 0 14px;font-size:24px;line-height:1.18}

/* from / to / due, like the memo grid at the top of a letter */
.fmeta{margin:0 0 14px;border-top:1px solid var(--line)}
.fmrow{
  display:grid;grid-template-columns:62px minmax(0,1fr);gap:12px;
  padding:9px 0;border-bottom:1px solid var(--line);align-items:baseline;margin:0;
}
.fmrow dt{margin:0;font-size:10.5px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--dim)}
.fmrow dd{margin:0;font-size:14px;color:var(--ink-2);line-height:1.4}

.fstat{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.fsp{
  font-size:11px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;
  color:var(--teal-hi);background:var(--teal-bg);border:1px solid var(--teal-line);
  padding:4px 10px;border-radius:999px;
}
.fstat.late .fsp{color:var(--coral);background:var(--coral-bg);border-color:var(--coral-line)}
.fsc{font-family:var(--mono);font-size:12px;color:var(--mut)}

/* the penalty is the reason the deadline matters, so it is not a footnote */
.penalty{
  font-size:13px;line-height:1.5;color:var(--coral);margin-top:12px;
  padding:9px 12px;border-radius:var(--r-s);background:var(--coral-bg);
}
.penalty.soft{color:var(--mut);background:rgba(255,255,255,.035);margin-top:8px}

/* how far along — stays under the top bar while the form scrolls */
.progress{
  position:sticky;top:var(--top-h);z-index:15;height:4px;margin:0 -18px 14px;
  background:var(--bg);overflow:hidden;
}
.progress i{
  display:block;height:100%;width:0;border-radius:0 4px 4px 0;
  background:linear-gradient(90deg,var(--teal),var(--teal-hi));transition:width .25s ease;
  box-shadow:0 0 12px rgba(95,224,198,.5);
}

/* one section, one card */
fieldset{
  border:1px solid var(--line);border-radius:var(--r-l);background:var(--card);
  margin:0 0 14px;padding:0 16px 4px;min-width:0;
}
fieldset legend{
  float:left;width:100%;padding:16px 0 4px;margin:0;
  display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--ink-2);
}
/* every row, not just the next one: when the first question is hidden (a
   follow-up, a worked-out line) the first one shown sat beside the floated
   heading and was squeezed to nothing (Ephrata's Cash collection, 11 Oct 2026) */
fieldset legend ~ *{clear:both}
fieldset legend .lgc{
  font-family:var(--mono);font-size:11px;font-weight:500;letter-spacing:0;text-transform:none;
  color:var(--dim);padding:2px 8px;border-radius:999px;background:rgba(255,255,255,.04);
  /* a long section title wraps; its "3 / 5" never does */
  white-space:nowrap;flex:none;
}
fieldset legend .lgc.full{color:var(--teal-hi);background:var(--teal-bg)}
fieldset legend .lgc.full::before{content:'✓ '}

.fld{
  display:grid;grid-template-columns:minmax(0,1fr) 136px;gap:8px 12px;align-items:center;
  padding:12px 0;border-bottom:1px solid var(--line);
}
.fld:last-child{border-bottom:0}
.fld > label{font-size:14.5px;color:var(--ink-2);line-height:1.35;font-weight:400}
.fld.indent > label{padding-left:14px;font-size:13.5px;color:var(--mut);position:relative}
.fld.indent > label::before{content:'';position:absolute;left:3px;top:.2em;bottom:.2em;width:2px;border-radius:2px;background:var(--line-3)}
.fld.wide{grid-template-columns:1fr}
.fld .hint{grid-column:1/-1;font-size:12.5px;color:var(--mut);margin-top:-2px;line-height:1.4}
.fld .hint.bad{color:var(--coral)}
.fld .hint.bad::before{content:'▲ ';font-size:9px;vertical-align:1px}
.fld .hint.good{color:var(--teal-hi)}
.fld .hint.good::before{content:'✓ '}
.fld .hint.odd{color:var(--gold);white-space:pre-line}
.fld .hint.odd::before{content:'⚠ '}
.fld.isodd input{border-color:var(--gold)}
/* the same under a list (app.js repeater) */
.hint.odd.listodd{color:var(--gold);white-space:pre-line;font-size:13px;line-height:1.45;margin:8px 6px 0 0;overflow-wrap:anywhere}
.hint.odd.listodd::before{content:'⚠ '}

/* a follow-up: opens under the answer that needs explaining, and says so */
.fld.follow,.repwrap.follow{
  margin-left:6px;padding-left:12px;border-left:2px solid var(--gold);
  background:linear-gradient(90deg,var(--gold-bg),transparent 70%);
}
.fld.follow > label,.repwrap.follow .replabel{color:var(--ink)}
.fld.follow > label::before,.repwrap.follow .replabel::before{content:'↳ ';color:var(--gold);font-weight:600}
.follow.opened{animation:followIn .28s ease}
@keyframes followIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.follow.opened{animation:none}}

.ratio{display:grid;grid-template-columns:minmax(0,1fr) 12px minmax(0,1fr);gap:4px;align-items:start}
.ratio .of{text-align:center;font-family:var(--mono);color:var(--dim);font-size:14px;align-self:start;padding-top:13px}
/* each of the two boxes says what goes in it */
.ratio .rbox{display:flex;flex-direction:column;gap:4px;min-width:0}
.ratio .rlab{font-size:11.5px;line-height:1.3;color:var(--mut);text-align:center;overflow-wrap:anywhere}
.fld.wide .ratio{max-width:420px}
/* a two-step count (app.js, f.ask): the total, then how many of them, with
   All and None to tap. Each step reads like any other number question. */
.fld.steps.stepsnone{display:none}
.stepbox{display:grid;gap:12px}
.stepbox .step{display:grid;grid-template-columns:minmax(0,1fr) 136px;gap:8px 12px;align-items:center}
.stepbox .step > label{font-size:14.5px;color:var(--ink-2);line-height:1.35}
.stepbox .step .chips{grid-column:1/-1}
.stepbox input.locked{background:var(--teal-bg);border-color:var(--teal-line);color:var(--teal-hi);font-weight:600;cursor:default}
.fld.follow .stepbox .step > label.lead{color:var(--ink)}
.fld.follow .stepbox .step > label.lead::before{content:'↳ ';color:var(--gold);font-weight:600}
.stepbox.miss{box-shadow:0 0 0 2px var(--coral);border-radius:10px;padding:6px}
.stepbox:focus{outline:2px solid var(--teal-hi);outline-offset:3px;border-radius:10px}

/* yes / no, as one control */
.fld.yn{grid-template-columns:1fr}
.seg{
  display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;
  background:var(--field);border:1px solid var(--line-2);border-radius:13px;
}
.seg button{
  min-height:42px;border:0;border-radius:10px;background:transparent;cursor:pointer;
  font-size:14.5px;font-weight:600;color:var(--mut);transition:background .12s ease,color .12s ease;
}
.seg button:hover{color:var(--ink)}
.seg button[aria-pressed="true"]{background:var(--teal-hi);color:var(--teal-ink);box-shadow:0 4px 12px rgba(95,224,198,.2)}
.seg.no button[aria-pressed="true"]{background:var(--coral);color:#2b0d06;box-shadow:0 4px 12px rgba(238,124,97,.2)}

/* said → done on the Chairman's page (js/promises.js) */
.chproms{display:grid;gap:10px}
.prtally{display:flex;flex-wrap:wrap;gap:6px;margin:-4px 0 4px}
.prtl{font-size:13px;padding:3px 9px;border-radius:999px;background:var(--teal-bg);color:var(--teal-hi);border:1px solid var(--teal-line)}
.prtl.bad{background:var(--coral-bg);color:var(--coral);border-color:var(--coral-line)}
/* the net on each job (chairman.js drawJobMoney) */
.chjm{display:grid;gap:8px}
.jmtotal{font-size:13.5px;color:var(--ink);margin:0 0 2px}
.jmrow{background:var(--card);border:1px solid var(--line-2);border-radius:var(--r);padding:10px 12px;display:grid;gap:4px}
.jmhead{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 12px;align-items:baseline}
.jmcode{font-weight:700;color:var(--ink)}
.jmnet{font-weight:700;color:var(--teal-hi);font-variant-numeric:tabular-nums}
.jmrow.bad .jmnet{color:var(--coral)}
.jmrow.wait .jmnet{color:var(--dim)}
.jmparts{font-size:13px;color:var(--ink-2,var(--ink));font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.jmwait{font-size:12.5px;color:var(--coral)}
/* the payroll (Payroll.js → app.js payrollView): the Chairman's page and Selam's */
.chpy,.pycard{display:grid;gap:14px}
.pywrap{display:grid;gap:8px;min-width:0}
.pyhead{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 12px;align-items:baseline}
.pymonth{font-weight:700;font-size:15px;color:var(--ink)}
.pystate{font-size:12.5px;color:var(--mut)}
.pystate.ready{color:var(--coral);font-weight:600}
.pystate.approved{color:var(--teal-hi);font-weight:600}
.pytotal{font-size:16px;font-weight:700;color:var(--ink);margin:0;font-variant-numeric:tabular-nums}
.pyparts{font-size:13px;color:var(--mut);margin:0;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.pywarn{font-size:13px;color:var(--coral);margin:0}
.pyacts{display:flex;flex-wrap:wrap;gap:8px}
.pyacts .pushbtn{margin:0}
.pyapprove.armed{outline:2px solid var(--coral);outline-offset:2px}
.pyrow{background:var(--card);border:1px solid var(--line-2);border-radius:var(--r);padding:0 12px}
.pyrow>summary{display:flex;justify-content:space-between;gap:12px;align-items:baseline;padding:9px 0;cursor:pointer;list-style:none}
.pyrow>summary::-webkit-details-marker{display:none}
.pyname{color:var(--ink);font-weight:600;min-width:0;overflow-wrap:anywhere}
.pypay{font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap}
.pyrow.nowage .pypay{color:var(--coral);font-weight:600;white-space:normal;text-align:right}
.pyrow.over .pyname::after{content:' ⚑';color:var(--coral)}
.pyrow[open]{padding-bottom:10px}
.pyrole{font-size:12.5px;color:var(--mut);margin:-2px 0 6px}
.pyline{display:flex;justify-content:space-between;gap:12px;font-size:13px;padding:3px 0;border-top:1px solid var(--line-2)}
.pyk{color:var(--mut);min-width:0}
.pyv{color:var(--ink);font-variant-numeric:tabular-nums;text-align:right;overflow-wrap:anywhere}
.pyline.minus .pyv,.pyline.carry .pyv{color:var(--coral)}
.pyline.plus .pyv{color:var(--teal-hi)}
.pyline.total .pyk,.pyline.total .pyv{font-weight:700;color:var(--ink)}
.pyline.sub .pyk,.pyline.sub .pyv{font-weight:600;color:var(--ink)}
.pyline.note .pyk,.pyline.note .pyv{color:var(--mut);font-size:12.5px}
/* Selam's payroll additions (app.js payAddCard) */
.pacard{display:grid;gap:12px}
.pahow{font-size:13px;color:var(--mut);margin:2px 0 8px}
.palist{display:grid;gap:6px}
.paline{display:flex;flex-wrap:wrap;align-items:center;gap:6px 8px;padding:8px 0;border-top:1px solid var(--line-2)}
.patext{flex:1 1 180px;min-width:0}
.paname{font-weight:600;color:var(--ink)}
.pawhat{font-size:13px;color:var(--mut);overflow-wrap:anywhere;font-variant-numeric:tabular-nums}
.paform{display:grid;gap:8px;margin-top:8px}
.paform[hidden]{display:none}
.pafield{display:grid;gap:4px;font-size:13px;color:var(--mut)}
.pafield select,.pafield input{width:100%;box-sizing:border-box;font:inherit;font-size:16px;color:var(--ink);background:var(--card-2,var(--card));border:1px solid var(--line-2);border-radius:10px;padding:9px 10px}
.paadd{justify-self:start;margin-top:8px}
.paadd[hidden]{display:none}
.prday{background:var(--card);border:1px solid var(--line-2);border-radius:var(--r);padding:10px 12px;display:grid;gap:6px}
.prhead{font-weight:700;font-size:14px}
.prplan{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:13px}
.prk{color:var(--mut)}
.prchip{padding:2px 8px;border-radius:999px;border:1px solid var(--line-3);font-family:var(--mono);font-size:12.5px}
.prchip.made{color:var(--teal-hi);border-color:var(--teal-line);background:var(--teal-bg)}
.prchip.not{color:var(--coral);border-color:var(--coral-line);background:var(--coral-bg)}
.prchip.extra{color:var(--gold);border-color:var(--gold);background:var(--gold-bg)}
.prrow{display:grid;grid-template-columns:18px minmax(70px,auto) 62px minmax(0,1fr);gap:8px;align-items:baseline;font-size:13.5px;padding:3px 0;border-top:1px solid var(--line)}
.prmark{font-weight:700;text-align:center}
.prrow.done .prmark{color:var(--teal-hi)}
.prrow.none .prmark,.prrow.again .prmark{color:var(--coral)}
.prrow.nofile .prmark,.prrow.due .prmark{color:var(--mut)}
.prwho{font-weight:600}
.prcode{font-family:var(--mono);font-size:12.5px}
.prwhat{color:var(--ink-2);min-width:0;overflow-wrap:anywhere}

/* buttons that fill a word box: its usual answers, or recent codes */
.chips.mini{gap:7px}
.chips.mini .chip{min-height:40px;padding:5px 11px;font-size:13.5px}
.chips.cellpicks{margin-top:6px}
.chips.cellpicks .chip{border-style:dashed}
/* under a code: what the code book says it is (app.js, 17 Oct 2026) */
.codehint{font-size:12.5px;color:var(--mut);line-height:1.4;margin-top:2px;white-space:pre-line;overflow-wrap:anywhere}
/* the box "Other" opens: what it is, in a few words */
.otherbox{margin-top:6px}

/* a yes/no inside a list row: the same control, smaller, its own words */
.seg.mini{padding:3px;gap:3px;border-radius:11px}
.seg.mini button{min-height:40px;font-size:13.5px;padding:4px 8px;line-height:1.2}

/* tap, don't type (11 Oct 2026): the usual answers as buttons — "what
   happened today" (t:'multi'), the reason under a "why" (picks), a choice */
.chips{display:flex;flex-wrap:wrap;gap:7px;padding:2px 0;border-radius:12px}
.chips .chip{
  min-height:40px;padding:8px 13px;border-radius:999px;cursor:pointer;
  border:1px solid var(--line-3);background:var(--field);color:var(--ink-2);
  font-size:14px;font-weight:500;line-height:1.25;text-align:left;
  transition:background .12s ease,color .12s ease,border-color .12s ease;
}
.chips .chip:hover{border-color:var(--teal-line);color:var(--ink)}
.chips .chip[aria-pressed="true"]{background:var(--teal-hi);border-color:var(--teal-hi);color:var(--teal-ink);font-weight:600}
.chips .chip[aria-pressed="true"]::before{content:'✓ '}
.chips .chip.none{border-style:dashed}
.chips .chip.none[aria-pressed="true"]{background:var(--teal-bg);color:var(--teal-hi);border-style:solid;border-color:var(--teal-line)}
.chips .chipg{flex-basis:100%;font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--mut);margin:8px 0 -1px}
.chips.miss{box-shadow:0 0 0 2px var(--coral);padding:6px}
.fld.picks .note{margin-top:2px}
.fld.picks textarea.note{min-height:0;height:auto}

/* site photos in a report: which job, a note, the button; then each photo
   as it goes, and the tally of what has gone (js/app.js photoField) */
.phctl{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:8px 10px;align-items:end}
.phbox{display:flex;flex-direction:column;gap:4px;min-width:0}
.phlbl{font-size:11.5px;color:var(--mut)}
.phbox select,.phbox input{width:100%}
.phadd{grid-column:1/-1;position:relative;overflow:hidden}
.phadd .phpick{position:absolute;inset:0;opacity:0;cursor:pointer;font-size:0}
/* the photo button in a list row is a label too; keep it a button */
.reprow .cell label.phadd{font-size:15.5px;color:var(--teal-ink);line-height:1.2;margin-top:2px}
.phtally{font-size:13px;color:var(--teal-hi);font-weight:600}
.phtally:empty{display:none}
.phstrip{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}
.phstrip:empty{display:none}
.phitem{display:flex;flex-direction:column;gap:3px;padding:5px;border-radius:var(--r-s);
  background:var(--field);border:1px solid var(--line-2);min-width:0}
.phitem img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:7px;display:block}
.phcap{font-size:11.5px;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.phst{font-size:11px;color:var(--mut)}
.phitem.ok{border-color:var(--teal-line)}
.phitem.ok .phst{color:var(--teal-hi)}
.phitem.bad{border-color:var(--coral-line)}
.phitem.bad .phst{color:var(--coral)}
@media (max-width:380px){.phctl{grid-template-columns:1fr}}
@media (min-width:400px){
  /* on a wider phone the answer sits beside the question */
  .fld.yn{grid-template-columns:minmax(0,1fr) 150px}
}

/* repeating rows: tables and grids in the planning documents */
.repwrap{padding:12px 0 8px;border-bottom:1px solid var(--line)}
.repwrap:last-child{border-bottom:0}
.repwrap.miss .replabel{color:var(--coral)}
.replabel{font-size:14.5px;font-weight:600;color:var(--ink);margin-bottom:10px}
.rep{display:flex;flex-direction:column;gap:8px}
.reprow{background:var(--card-2);border:1px solid var(--line);border-radius:var(--r);padding:10px 12px 6px}
.reprowhead{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:4px}
.reprowhead .idx{color:var(--teal-hi)}
/* a job carried from an earlier report: its code is the row's heading (carry) */
.reprowhead .idx.carried{font-size:15px;letter-spacing:.02em;text-transform:none;color:var(--ink);padding:6px 0 2px}
.reprowhead .rm{
  min-width:44px;height:44px;display:flex;align-items:center;justify-content:center;
  border:0;border-radius:var(--r-xs);background:transparent;color:var(--dim);cursor:pointer;font-size:20px;
}
.reprowhead .rm:hover,.reprowhead .rm:active{background:var(--coral-bg);color:var(--coral)}
.reprowhead .rm.armed{background:var(--coral-bg);color:var(--coral);font-size:13px;font-weight:700;padding:0 12px}
.reprow .cell{display:grid;grid-template-columns:minmax(0,1fr) 128px;gap:6px 12px;align-items:center;padding:4px 0}
.reprow .cell label{font-size:13px;color:var(--mut);line-height:1.3}
/* a written answer in a row (a customer, a next step) gets the whole width
   under its label; a 110 px box showed "Board delive" of what was typed */
.reprow .cell.wide{grid-template-columns:minmax(0,1fr);gap:4px}
/* 16 px: anything smaller and an iPhone zooms the page on every tap */
.reprow input,.reprow select{min-height:42px;font-size:16px}
.addrow{width:100%;min-height:44px;background:transparent;border-style:dashed}

/* the message as it will be sent */
.preview{
  background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px;margin:0;
  font-family:var(--mono);font-size:12px;line-height:1.65;white-space:pre-wrap;word-break:break-word;
  color:var(--mut);max-height:260px;overflow:auto;
}

/* the send bar */
.bar{
  position:fixed;left:0;right:0;bottom:0;z-index:30;
  background:rgba(8,14,13,.86);
  -webkit-backdrop-filter:blur(16px) saturate(1.3);backdrop-filter:blur(16px) saturate(1.3);
  border-top:1px solid var(--line-2);
  padding:10px 18px calc(10px + env(safe-area-inset-bottom));
}
.bar-in{max-width:640px;margin:0 auto;display:flex;gap:8px;align-items:center}
.bar .count{flex:1;min-width:0;font-size:13px;color:var(--mut);line-height:1.3}
.bar .count b{font-family:var(--mono);color:var(--coral);font-weight:600;font-size:15px;margin-right:3px}
.bar .count:not(.findable){color:var(--teal-hi);font-weight:600}
.bar .count:not(.findable)::before{content:'✓ '}
.count.findable{cursor:pointer}
.count.findable::after{content:'↓';display:inline-block;margin-left:5px;color:var(--coral)}
.count.findable:active{opacity:.6}
.bar .btn{min-height:46px}
.bar .btn:not(.ghost){padding:0 22px}
@media (max-width:420px){
  .fld{grid-template-columns:minmax(0,1fr) 116px}
  .reprow .cell{grid-template-columns:minmax(0,1fr) 110px}
  .bar .btn.ghost{padding:0 11px;font-size:13.5px}
  .bar .btn:not(.ghost){padding:0 16px}
}
@media (max-width:360px){ .bar .count{font-size:12px} }

/* ================================================================
   7  CHAT
   ================================================================ */
body[data-page="chat"]{padding-bottom:0}
body[data-page="chat"] .wrap{padding-bottom:110px}

.sal{padding:4px 0 0}
.sal h1{margin:18px 0 4px}
.sal p{font-size:14px;color:var(--mut);margin:0}
.thread-sal h1{font-size:22px;margin-top:14px}
.thread-sal p{font-size:13px;line-height:1.45}

.thread{display:flex;flex-direction:column;gap:6px;margin:18px 0 0;padding-bottom:12px}
.daymark{
  align-self:center;margin:14px 0 8px;padding:4px 12px;border-radius:999px;
  font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--mut);background:var(--card);border:1px solid var(--line);
}
.msg{
  align-self:flex-start;max-width:84%;padding:9px 13px 7px;
  background:var(--card-2);border:1px solid var(--line);border-radius:18px 18px 18px 6px;
}
.msg.own{
  align-self:flex-end;background:linear-gradient(170deg,#1b4d44,#153d36);border-color:rgba(95,224,198,.18);
  border-radius:18px 18px 6px 18px;
}
.msgwho{font-size:12px;font-weight:700;color:var(--teal-hi);margin-bottom:2px}
.msg.own .msgwho{display:none}
.msgtext{font-size:15.5px;line-height:1.48;color:var(--ink);white-space:pre-wrap;word-break:break-word}
.msgtime{font-family:var(--mono);font-size:10.5px;color:var(--dim);text-align:right;margin-top:3px}
.msg.own .msgtime{color:rgba(197,210,205,.6)}
.msgimg{display:block;margin:4px 0;line-height:0}
.msgimg img{display:block;max-width:100%;height:auto;border-radius:12px;background:var(--raise)}
.msgvoice{display:block;width:100%;min-width:210px;margin:4px 0 2px;height:38px}
.msgdur{font-family:var(--mono);font-size:10.5px;color:var(--dim);text-align:right}
/* a customer from Klever's WhatsApp, and the two ways to answer them */
.msg.wa{border-color:rgba(37,211,102,.35)}
.msg.wa .msgwho{color:#5fd68a}
.msgwa{display:flex;gap:8px;margin:8px 0 2px;flex-wrap:wrap}
.msgwa-btn{display:inline-flex;align-items:center;min-height:36px;padding:0 14px;border-radius:999px;
  border:1px solid rgba(95,214,138,.45);color:#8fe3ad;font-size:14px;font-weight:600;text-decoration:none}
.msgwa-btn:active{background:rgba(95,214,138,.12)}

.composer,.recbar{
  position:fixed;left:0;right:0;bottom:0;z-index:30;
  background:rgba(8,14,13,.9);
  -webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);
  border-top:1px solid var(--line-2);
  padding:10px 14px calc(10px + env(safe-area-inset-bottom));
  display:flex;gap:8px;align-items:flex-end;
}
.composer textarea{
  flex:1;min-width:0;min-height:44px;max-height:150px;padding:11px 15px;
  border-radius:22px;resize:none;overflow-y:auto;font-size:16px;line-height:1.4;
}
.compbtn{
  flex:none;width:44px;height:44px;border-radius:50%;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  background:var(--card);border:1px solid var(--line-2);color:var(--ink-2);font-size:18px;line-height:1;
}
.compbtn input{display:none}
.compbtn:hover{border-color:var(--line-3)}
.compbtn:disabled{opacity:.4;cursor:not-allowed}
.compbtn.busy{opacity:.5;pointer-events:none}
.compbtn.busy span{animation:breathe 1s ease-in-out infinite}
.composer .chatsend,.recbar .chatsend{width:auto;min-height:44px;margin:0;padding:0 18px;border-radius:22px;flex:none;font-size:15px}
.recbar{align-items:center}
.recbar .spacer{flex:1}
.recbar .recdot{width:11px;height:11px;flex:none;border-radius:50%;background:var(--coral);animation:breathe 1.1s ease-in-out infinite}
.recbar .rectime{font-family:var(--mono);font-size:14px;color:var(--ink-2)}

/* ================================================================
   8  THE CHAIRMAN'S PAGE
   ================================================================ */
.chtiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:14px 0 6px}
@media (max-width:560px){.chtiles{grid-template-columns:repeat(2,minmax(0,1fr))}}
.chtile{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:12px 13px;
  display:flex;flex-direction:column;justify-content:space-between;gap:6px}
.chtl{color:var(--dim);font-size:10px}
.chtv{font-family:var(--mono);font-size:21px;font-weight:500;margin-top:5px;color:var(--ink);font-variant-numeric:tabular-nums;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.chanalysis{
  background:#081010;border:1px solid var(--line-2);border-radius:var(--r-l);
  padding:14px 12px 16px;margin:0 0 8px;
}
.skysub{font-size:12.5px;color:var(--mut);text-align:center;margin:2px 0 6px;line-height:1.5}

svg.sky{display:block;width:100%;height:auto;touch-action:manipulation}
svg.sky .node{cursor:pointer}
svg.sky .node circle.hit{fill:transparent}
svg.sky .node .glow{opacity:.5}
svg.sky .node text{font-family:var(--sans);font-size:7.6px;font-weight:600;fill:#7e908b;text-anchor:middle;pointer-events:none}
svg.sky .node.on text{fill:#eaf0ee}
svg.sky .node.quiet text{fill:#55645f}
svg.sky .node.absent{opacity:.35;cursor:default}
svg.sky .core{cursor:pointer}
svg.sky .core text.n{font-family:var(--mono);font-size:15px;font-weight:500;fill:#eaf0ee;text-anchor:middle}
svg.sky .core text.l{font-family:var(--sans);font-size:6.6px;font-weight:700;fill:#3fbfa8;letter-spacing:.16em;text-anchor:middle}

.chfind{
  background:var(--card-2);border:1px solid var(--line-2);border-left:3px solid var(--line-3);
  border-radius:var(--r);padding:14px 15px;margin:12px 2px 2px;
}
.chfind.brief{background:linear-gradient(170deg,#15312c,#0f1f1c);border-color:rgba(95,224,198,.2);border-left-color:var(--teal-hi)}
.chfind.decision,.chfind.loud{border-left-color:var(--coral)}
.chfind.decision{background:#1a1311}
.chfh{font-size:13.5px;font-weight:700;color:var(--teal-hi);margin-bottom:6px}
.chfind.decision .chfh,.chfind.loud .chfh{color:var(--coral)}
.chft{font-family:var(--serif);font-size:15px;line-height:1.62;color:var(--ink-2);white-space:pre-line}
body[data-page="chairman"] .codenote{font-size:12.5px;color:var(--dim);text-align:center;margin:12px 0 0}

/* his instructions */
.chinsform,.chask-form{
  display:flex;flex-direction:column;gap:10px;margin:0 0 14px;padding:16px;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-l);
}
.chinsf{display:flex;align-items:center;gap:12px}
.chinsf span{font-size:11px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--dim);width:40px;flex:none}
.chinsform .seed,.chask-form .seed{align-self:flex-start;margin:4px 0 0;min-height:44px;padding:0 20px;
  background:linear-gradient(180deg,var(--teal-hi),var(--teal));color:var(--teal-ink);border:0;font-weight:700}
.chinslist,.chcharges{display:flex;flex-direction:column;gap:8px}

/* his questions to the AI, and the CFO's week */
.chask-note{font-size:12px;color:var(--mut);margin:-4px 2px 12px;line-height:1.45}
.chask-list{display:flex;flex-direction:column;gap:8px}
.chask-item{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:13px 15px}
.chask-q{font-size:14.5px;font-weight:700;color:var(--ink);margin-bottom:8px;overflow-wrap:anywhere}
.chask-a{overflow-wrap:anywhere}
.chask-wait{font-size:13.5px;color:var(--mut);font-style:italic}
.chask-fail{font-size:13.5px;color:var(--coral);line-height:1.5}
.chask-meta{font-family:var(--mono);font-size:11.5px;color:var(--dim);margin-top:8px}
.chask-again{margin-top:10px;min-height:40px;padding:0 16px;border-radius:var(--r-s);background:transparent;
  border:1px solid var(--line-2);color:var(--ink-2);font-family:var(--sans);font-size:13.5px;font-weight:600;cursor:pointer}
/* his orders: the plan, one row a person, before he sends it */
.chord-list{display:flex;flex-direction:column;gap:10px}
.chord-row{display:flex;flex-direction:column;gap:8px;padding:11px 0 12px;border-top:1px solid var(--line)}
.chord-top{display:flex;gap:8px;align-items:center}
.chord-top select{flex:1;min-width:0;min-height:40px}
.chord-row textarea{width:100%;box-sizing:border-box;font-size:16px;line-height:1.45}
.chord .chinsf input{flex:1;min-width:0;max-width:100%}
.chord-why{font-size:12px;color:var(--mut);line-height:1.4;overflow-wrap:anywhere}
.chord-bar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:12px}
.chord-bar .seed{margin:0;min-height:44px;padding:0 20px;
  background:linear-gradient(180deg,var(--teal-hi),var(--teal));color:var(--teal-ink);border:0;font-weight:700}
.chord-bar .chask-again{margin-top:0}
.chord-sent{font-size:12px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--teal-hi);margin-bottom:6px}
.chord-done{padding:10px 0;border-top:1px solid var(--line)}
.chord-to{font-size:13px;font-weight:700;color:var(--ink)}
.chord-what{font-size:14px;color:var(--ink-2);line-height:1.5;margin-top:3px;overflow-wrap:anywhere;white-space:pre-line}
.chord-wa{display:inline-flex;align-items:center;text-decoration:none;margin-top:8px}
.chord-ask{font-size:14px;color:var(--ink);line-height:1.5;margin-bottom:8px;overflow-wrap:anywhere}
.chord-ask + textarea{width:100%;box-sizing:border-box}
.chord-old summary{cursor:pointer;font-size:13px;color:var(--ink-2);padding:4px 0;min-height:32px;overflow-wrap:anywhere}
.chord-old[open] summary{color:var(--mut)}
.chord-done .chord-why{margin-top:6px}
.chfind.cfo{border-left-color:var(--gold)}
.chfind.hr{border-left-color:var(--teal)}
.chfind.legal{border-left-color:var(--coral)}
.chfind.ops{border-left-color:#3b6fb0}
.chfind.rd{border-left-color:#6b5fb0}
.rdwrap{margin:0 0 6px}
.rdcard{border:1px solid var(--line);border-radius:12px;margin:0 0 8px;padding:0 12px;background:var(--card)}
.rdcard-s{display:flex;gap:10px;align-items:baseline;justify-content:space-between;padding:12px 0;cursor:pointer;list-style:none}
.rdcard-s::-webkit-details-marker{display:none}
.rdcard-t{font-weight:600;font-size:14px;color:var(--ink)}
.rdcard-d{font-size:12px;color:var(--mut);text-align:right}
.rdcard[open] .rdcard-s{border-bottom:1px solid var(--line)}
.rdcard-x{white-space:pre-wrap;font-size:14px;line-height:1.6;padding:10px 0 12px;color:var(--ink);overflow-wrap:anywhere}
.rdcard.isnew .rdcard-t::before{content:"● ";color:var(--teal-hi)}
.chrd{border:1px solid var(--line);border-radius:12px;margin:0 0 8px;padding:0 12px;background:var(--card)}
.chrd-s{display:flex;gap:10px;align-items:baseline;justify-content:space-between;padding:12px 0;cursor:pointer;list-style:none}
.chrd-s::-webkit-details-marker{display:none}
.chrd-t{font-weight:600;font-size:14px;color:var(--ink)}
.chrd-v{font-family:var(--mono);font-size:12px;color:var(--mut);text-align:right;overflow-wrap:anywhere}
.chrd[open] .chrd-s{border-bottom:1px solid var(--line)}
.chheat{display:grid;grid-template-columns:repeat(5,1fr);gap:3px;max-width:220px;margin:10px 0 2px}
.chheat-c{aspect-ratio:1;border-radius:4px;display:flex;align-items:center;justify-content:center;font-family:var(--mono);font-size:12px;opacity:.35}
.chheat-c.on{opacity:1;font-weight:700;color:#0b1210}
.chheat-c.red{background:var(--coral)}.chheat-c.amber{background:var(--gold)}.chheat-c.green{background:var(--teal)}
.chheat-k{font-size:11px;color:var(--dim);margin:0 0 8px}
.chcfo-lines{margin:10px 2px 0}
.chcfo-head .chfk,.chcfo-head .chfv{font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}
.chcfo-avg{color:var(--dim)}
.chinsrow,.chchg{
  background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:13px 15px;
}
.chinsh{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;margin-bottom:5px}
.chinsh .chrw{font-size:14.5px;font-weight:700;color:var(--ink)}
.chinsh .chrr{flex:1;min-width:0;font-size:13px;color:var(--mut)}
.chinsh .chrt{margin-left:auto;font-family:var(--mono);font-size:12px;color:var(--mut)}
.chinsh .chrt.bad{color:var(--coral)}
.chinst{font-family:var(--serif);font-size:15.5px;line-height:1.5;color:var(--ink-2);margin-bottom:10px}
.chinsn{font-size:13px;color:var(--mut);margin:0 0 10px;line-height:1.45;padding:8px 11px;border-radius:var(--r-s);background:rgba(255,255,255,.035)}
.chinsrow.done .chinst{color:var(--mut)}
.chinsrow.done .chinsh .chrt{color:var(--teal-hi)}
.chinsrow .chmini,.chchg .chmini{min-height:40px;padding:0 12px;font-size:12.5px}
.chchg.off{opacity:.75}
.chchg.off .chinsh .chrt{text-decoration:line-through;color:var(--dim)}
.chcancel{display:flex;gap:8px;flex-wrap:wrap;margin-top:4px}
.chcancel input{flex:1;min-width:180px;min-height:40px}
.chmonth{margin:10px 0 0}
.chmonth .chf{padding:9px 16px}

/* the raw day */
.chrow{
  background:var(--card);border:1px solid var(--line);border-left:3px solid var(--teal);
  border-radius:var(--r);margin-bottom:8px;overflow:hidden;
}
.chrow.late{border-left-color:var(--coral)}
.chrow summary{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;padding:12px 14px;cursor:pointer;list-style:none}
.chrow summary::-webkit-details-marker{display:none}
.chrow summary::after{content:'+';margin-left:auto;font-family:var(--mono);color:var(--dim)}
.chrow[open] summary::after{content:'−'}
.chrw{font-size:14.5px;font-weight:700;color:var(--ink)}
.chrr{font-size:13px;color:var(--mut);flex:1;min-width:0}
.chrt{font-family:var(--mono);font-size:12px;color:var(--mut)}
.chrow.late .chrt{color:var(--coral)}
.chrbody{padding:0 14px 14px;border-top:1px solid var(--line)}
.chsec{color:var(--teal-hi);margin:14px 0 6px;font-size:10.5px}
.chf{display:flex;gap:12px;padding:6px 0;border-bottom:1px solid var(--line);align-items:baseline}
.chfk{font-size:13px;color:var(--mut);flex:1;min-width:0}
.chfv{font-family:var(--mono);font-size:13px;color:var(--ink);text-align:right;word-break:break-word;max-width:60%}
/* a list inside a report: the question on top, a line per row under it */
.chf.chftable{display:block}
.chflist{display:grid;gap:3px;margin-top:5px;font-size:13px;color:var(--ink);line-height:1.45}
.chflist div{padding-left:10px;border-left:2px solid var(--line-2);overflow-wrap:anywhere}
.chflags,.chmissing{
  margin-top:14px;padding:12px 14px;border-radius:var(--r);
  background:var(--coral-bg);border:1px solid var(--coral-line);font-size:13.5px;color:#f2b5a5;line-height:1.6;
}
.chflags .chfl,.chmissing .chfl{color:var(--coral);margin-bottom:6px;font-size:10.5px}

/* ---------- at a glance: the charts (js/charts.js) ----------
   Teal is met or on time, gold is late, red is missing or short — the site's
   own meanings. "Missing" is a redder red than --coral: beside gold, coral
   measured 14.9 apart for normal vision, under the 15 two status colours
   need; this one measures 18.7, and 14.2 for red-green colour blindness.
   Every mark still carries its sign or its words; colour is never alone. */
:root{--miss:#e5574a}
.chcharts{display:grid;gap:12px;margin:14px 0 6px}
.cg{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:14px 14px 12px;min-width:0}
.cg-head{margin:0 0 10px}
.cg-title{font-size:15px;font-weight:700;margin:0;color:var(--ink);letter-spacing:-.01em;line-height:1.3}
.cg-sub{font-size:12.5px;color:var(--mut);margin:2px 0 0;line-height:1.45}
.cg-now{font-size:13.5px;color:var(--ink-2);margin:8px 0 0;display:flex;gap:7px;align-items:baseline;line-height:1.45}
.cg-now .cg-ic{font-weight:700;flex:none}
.cg-now.good .cg-ic{color:var(--teal-hi)}
.cg-now.warn .cg-ic{color:var(--gold)}
.cg-now.bad .cg-ic{color:var(--miss)}
.cg-now.none .cg-ic{color:var(--dim)}
.cg-plot{position:relative;width:100%}
.cg-svg{display:block;overflow:visible;touch-action:pan-y;-webkit-tap-highlight-color:transparent}
.cg-tick{font:500 10.5px var(--mono);fill:var(--mut)}
.cg-tick.cg-today{fill:var(--teal-hi);font-weight:600}
.cg-name{font:500 12px var(--sans);fill:var(--ink-2)}
.cg-grid{stroke:var(--line);stroke-width:1}
.cg-base{stroke:var(--line-3);stroke-width:1}
.cg-ref{stroke:var(--ink-2);stroke-width:1.5;opacity:.7}
.cg-tick.cg-reftick{fill:var(--ink);font-weight:600}
.cg-val{font:600 11px var(--mono);fill:var(--ink)}
/* words laid over marks keep a halo of the card, so a line or a bar behind
   them cannot make them unreadable */
.cg-val,.cg-tick{paint-order:stroke;stroke:var(--card);stroke-width:3.5px;stroke-linejoin:round}
.cg-bar.is-good{fill:var(--teal-hi)}
.cg-bar.is-bad{fill:var(--miss)}
.cg-bar.is-partial{fill:var(--teal-hi);opacity:.45}
/* a figure with no target to meet (the salespeople's month) */
.cg-bar.is-plain{fill:var(--ink-2)}
.cg-ref{pointer-events:none}
/* the period picker above a chart (This week · Last week · This month) */
.cg-seg{display:flex;gap:4px;padding:3px;margin:0 0 10px;background:var(--field);border:1px solid var(--line-2);border-radius:11px}
.cg-seg button{flex:1;min-height:36px;border:0;border-radius:8px;background:transparent;cursor:pointer;
  font:600 13px/1.2 var(--sans);color:var(--mut);padding:4px 6px;transition:background .12s ease,color .12s ease}
.cg-seg button:hover{color:var(--ink)}
.cg-seg button[aria-pressed="true"]{background:var(--teal-bg);color:var(--teal-hi);box-shadow:inset 0 0 0 1px var(--teal-line)}
g.on .cg-bar,g.on .cg-dot{filter:brightness(1.18)}
.cg-none{fill:var(--dim);opacity:.75}
.cg-wait{fill:var(--line-3)}
.cg-path{fill:none;stroke:var(--teal-hi);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.cg-dot{stroke:var(--card);stroke-width:2}
.cg-dot.is-good{fill:var(--teal-hi)}
.cg-dot.is-bad{fill:var(--miss)}
.cg-cross{stroke:var(--line-3);stroke-width:1}
.cg-hit{fill:transparent;cursor:pointer;outline:none}
.cg-hit:focus-visible{fill:rgba(95,224,198,.10);stroke:var(--teal-hi);stroke-width:1}
.cg-cell.s-ok .cg-sq{fill:var(--teal-hi)}
.cg-cell.s-late .cg-sq{fill:var(--gold)}
.cg-cell.s-miss .cg-sq{fill:var(--miss)}
.cg-cell.s-wait .cg-sq{fill:none;stroke:var(--line-3);stroke-width:1}
.cg-cell .cg-ic{font:700 11px var(--sans);fill:#06120f;pointer-events:none}
.cg-cell .cg-ic-s{font-size:9px}
.cg-key.s-split i{background:linear-gradient(90deg,var(--gold) 0 48%,transparent 48% 52%,var(--miss) 52% 100%)}
.cg-cell.s-wait .cg-ic{fill:var(--dim)}
.cg-cell.on .cg-sq{filter:brightness(1.18)}
.cg-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin:10px 0 0;font-size:12px;color:var(--mut)}
.cg-key{display:inline-flex;align-items:center;gap:6px}
.cg-key i{display:inline-grid;place-items:center;width:14px;height:14px;border-radius:4px;font:700 9.5px var(--sans);font-style:normal;color:#06120f}
.cg-key.s-ok i,.cg-key.is-good i{background:var(--teal-hi)}
.cg-key.s-late i{background:var(--gold)}
.cg-key.s-miss i,.cg-key.is-bad i{background:var(--miss)}
.cg-key.s-wait i{border:1px solid var(--line-3);color:var(--dim)}
.cg-key.is-none i{background:none;color:var(--dim)}
.cg-key.is-partial i{background:var(--teal-hi);opacity:.45}
.cg-refkey b{display:inline-block;width:16px;height:0;border-top:1.5px solid var(--ink-2);opacity:.8}
.cg-cap{font-size:12.5px;color:var(--mut);margin:8px 0 0;line-height:1.5}
.cg-cap.bad{color:var(--coral)}
.cg-empty{position:absolute;left:46px;right:8px;top:46px;text-align:center;font-size:12.5px;color:var(--mut);pointer-events:none;line-height:1.45}
.cg-tip{position:absolute;z-index:3;pointer-events:none;background:var(--raise);border:1px solid var(--line-2);border-radius:8px;
  padding:6px 9px;box-shadow:var(--shadow);max-width:250px;font-size:12px;line-height:1.4}
.cg-tip-v{font-weight:600;font-size:13px;color:var(--ink)}
.cg-tip-k{color:var(--ink-2)}
.cg-hit.can-open{cursor:pointer}
/* a person's day, opened from a chart: the observatory's panel, over a dimmed page */
.chsheet-veil{position:fixed;inset:0;z-index:29;background:rgba(0,0,0,.5);animation:chVeil .2s ease-out}
@keyframes chVeil{from{opacity:0}}
.chsheet{max-height:min(82vh,760px)}
.chsheet-t{font-size:19px;font-weight:700;margin:0;padding-right:44px;color:var(--ink);letter-spacing:-.01em}
.chsheet-d{font-size:13px;color:var(--mut);margin:2px 0 12px}
.chsheet-b{display:grid;gap:8px}
.chsheet .chrow{margin:0}
.chnotfiled{padding:12px 14px}
.chnfh{display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}
.chnotfiled .chrr{color:var(--ink-2)}
.chnotfiled.late .chrt{color:var(--miss)}
.chnotfiled .codenote{text-align:left;margin:6px 0 0}
.cg-table{margin:10px 0 0}
.cg-table summary{cursor:pointer;color:var(--mut);font-size:12.5px;padding:2px 0}
.cg-table table{width:100%;border-collapse:collapse;margin-top:6px;font-size:12.5px}
.cg-table th{text-align:left;font-weight:600;color:var(--mut);padding:4px 6px;border-bottom:1px solid var(--line-2);font-size:11.5px}
.cg-table td{padding:4px 6px;border-bottom:1px solid var(--line);color:var(--ink-2)}
.cg-table td.num,.cg-table th+th{text-align:right}
.cg-table td.num{font-family:var(--mono);font-variant-numeric:tabular-nums}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{transition:none!important;animation:none!important;scroll-behavior:auto!important}
}

/* ================================================================
   10  THE OBSERVATORY — the agents as a star system
   ================================================================
   One canvas behind everything; the words float over it on glass. The
   page does not scroll — the sky is the page — and the sheet that rises
   when a planet is tapped scrolls inside itself if it has to.          */
body[data-page="agents"]{padding-bottom:0;overflow:hidden;height:100%;background:#020506}
body[data-page="agents"] .top{background:rgba(2,5,6,.35);border-bottom-color:rgba(255,255,255,.05)}
body[data-page="agents"] .wrap{max-width:none;padding:0}

.obs-sky{position:fixed;inset:0;z-index:0;display:block;touch-action:manipulation;cursor:crosshair}
.obs-hud{
  position:relative;z-index:5;max-width:680px;margin:0 auto;padding:16px 18px 0;
  display:flex;justify-content:space-between;align-items:flex-start;gap:12px;pointer-events:none;
}
.obs-hud > *{pointer-events:auto}
.obs-kicker{
  font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--teal-hi);text-shadow:0 0 18px rgba(95,224,198,.5);
}
.obs-title{
  margin:4px 0 6px;font-size:28px;font-weight:800;letter-spacing:-.03em;line-height:1.05;
  background:linear-gradient(180deg,#ffffff,#b9d6cf);-webkit-background-clip:text;background-clip:text;color:transparent;
}
.obs-meta,.obs-next{margin:0;font-size:12.5px;color:var(--mut);line-height:1.5;text-shadow:0 1px 8px #000}
.obs-next{font-family:var(--mono);font-size:11.5px;color:var(--dim)}
.obs-run{
  flex:none;margin-top:4px;min-height:38px;padding:0 14px;border-radius:12px;cursor:pointer;
  font-family:var(--sans);font-size:13px;font-weight:700;color:var(--teal-hi);
  background:rgba(10,24,22,.55);border:1px solid var(--teal-line);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  box-shadow:0 0 24px rgba(95,224,198,.12);
}
.obs-run:disabled{opacity:.55;cursor:default}

.obs-legend{
  position:fixed;left:0;right:0;bottom:calc(16px + env(safe-area-inset-bottom));z-index:5;
  display:flex;justify-content:center;gap:18px;font-size:12px;font-weight:600;color:var(--mut);
  pointer-events:none;text-shadow:0 1px 8px #000;
}
.obs-leg i{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:7px;vertical-align:0}
.obs-leg.loud i{background:var(--coral);box-shadow:0 0 10px var(--coral)}
.obs-leg.warm i{background:var(--gold);box-shadow:0 0 10px var(--gold)}
.obs-leg.quiet i{background:#6f8f88}
.obs-hud,.obs-legend{transition:opacity .25s ease}
.obs.picked .obs-legend,.obs.picked .obs-hud{opacity:0;pointer-events:none}
.obs.picked .obs-hud > *{pointer-events:none}

/* the same sixteen as buttons, out of sight until a keyboard reaches them */
.obs-list{position:fixed;left:0;bottom:0;width:1px;height:1px;overflow:hidden}
.obs-list button:focus{
  position:fixed;left:50%;bottom:calc(52px + env(safe-area-inset-bottom));transform:translateX(-50%);z-index:40;
  width:auto;height:auto;padding:10px 16px;border-radius:12px;
  background:var(--card-2);color:var(--ink);border:1px solid var(--teal-line);font-size:14px;font-weight:600;
}

/* what rises when a planet is tapped */
.obs-sheet{
  position:fixed;left:50%;bottom:0;transform:translateX(-50%);z-index:30;
  width:min(560px,100%);max-height:min(74vh,640px);overflow:auto;overscroll-behavior:contain;
  padding:10px 20px calc(18px + env(safe-area-inset-bottom));
  background:linear-gradient(180deg,rgba(16,30,27,.86),rgba(8,15,14,.94));
  -webkit-backdrop-filter:blur(22px) saturate(1.4);backdrop-filter:blur(22px) saturate(1.4);
  border:1px solid rgba(255,255,255,.1);border-bottom:0;border-radius:26px 26px 0 0;
  box-shadow:0 -24px 70px rgba(0,0,0,.6), inset 0 1px 0 rgba(255,255,255,.07);
  animation:obsUp .34s cubic-bezier(.2,.8,.2,1);
}
@keyframes obsUp{from{transform:translate(-50%,28px);opacity:0}}
.obs-grab{width:42px;height:4px;border-radius:4px;background:rgba(255,255,255,.18);margin:0 auto 14px}
.obs-close{
  position:absolute;top:12px;right:14px;width:34px;height:34px;border-radius:50%;cursor:pointer;
  background:rgba(255,255,255,.06);border:1px solid var(--line-2);color:var(--mut);font-size:19px;line-height:1;
}
.obs-close:hover{color:var(--ink)}
.obs-top{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding-right:40px}
.obs-ring{font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--dim)}
.obs-state{
  font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;
  padding:4px 10px;border-radius:999px;border:1px solid transparent;
}
.obs-state.loud{color:var(--coral);background:var(--coral-bg);border-color:var(--coral-line)}
.obs-state.warm{color:var(--gold);background:var(--gold-bg);border-color:rgba(227,181,71,.35)}
.obs-state.quiet{color:var(--teal-hi);background:var(--teal-bg);border-color:var(--teal-line)}
.obs-state.none{color:var(--mut);background:rgba(255,255,255,.04);border-color:var(--line-2)}
.obs-sheet h2{font-size:26px;font-weight:800;letter-spacing:-.025em;line-height:1.1;margin:10px 0 8px;color:var(--ink)}
.obs-watch{font-size:15px;line-height:1.5;color:var(--ink-2);margin:0 0 14px}
.obs-reads{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 18px}
.obs-reads-k{font-size:10.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);margin-right:2px}
.obs-chip{
  font-size:12.5px;padding:4px 10px;border-radius:9px;color:var(--ink-2);
  background:rgba(255,255,255,.05);border:1px solid var(--line);
}
.obs-said-k{
  display:flex;align-items:center;gap:10px;margin:0 0 8px;
  font-size:10.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--teal-hi);
}
.obs-said-k::after{content:'';flex:1;height:1px;background:var(--line-2)}
.obs-said{font-family:var(--serif);font-size:16.5px;line-height:1.62;color:var(--ink);white-space:pre-line}
.obs-said.empty{font-family:var(--sans);font-size:14px;color:var(--mut)}
.obs-nav{display:flex;justify-content:space-between;gap:8px;margin-top:18px}
.obs-step{
  flex:1;min-width:0;min-height:40px;padding:0 12px;border-radius:12px;cursor:pointer;
  background:rgba(255,255,255,.04);border:1px solid var(--line-2);color:var(--mut);
  font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.obs-step:last-child{text-align:right}
.obs-step:hover{color:var(--ink);border-color:var(--line-3)}

/* ---------- the 3D sky ---------- */
.obs-3d{opacity:0;transition:opacity .9s ease}
.obs-3d.in{opacity:1}
.obs3d-labels{position:fixed;inset:0;z-index:2;pointer-events:none;overflow:hidden}
.obs3d-label{
  position:absolute;left:0;top:0;padding:2px 6px;border:0;background:none;cursor:pointer;
  font-family:var(--sans);font-size:12px;font-weight:600;letter-spacing:.01em;white-space:nowrap;
  color:#cfe0da;text-shadow:0 1px 6px #000,0 0 2px #000;transition:opacity .25s ease;will-change:transform;
}
.obs3d-label.loud{color:#ff9a80}
.obs3d-label.warm{color:#f3c768}
.obs3d-label.none{color:#7d8f89}
.obs3d-sun{
  position:absolute;left:0;top:0;display:flex;align-items:baseline;gap:6px;cursor:pointer;
  padding:5px 12px 6px;border-radius:999px;pointer-events:auto;white-space:nowrap;
  background:rgba(8,14,13,.62);border:1px solid rgba(255,214,150,.35);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);color:#ffe6bd;
  box-shadow:0 0 24px rgba(255,190,110,.18);
}
.obs3d-sun b{font-family:var(--mono);font-size:15px;font-weight:600;color:#fff3dc}
.obs3d-sun span{font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}

/* the way in, from the Chairman's page */
.obs-open{
  display:flex;align-items:center;justify-content:center;gap:10px;margin:12px 2px 0;min-height:48px;
  border-radius:var(--r);text-decoration:none;font-weight:700;font-size:14.5px;color:#eaf8f4;
  background:
    radial-gradient(120% 140% at 50% 0%, rgba(95,224,198,.22), rgba(95,224,198,0) 60%),
    linear-gradient(180deg,#0f2320,#0a1715);
  border:1px solid var(--teal-line);box-shadow:0 0 30px rgba(95,224,198,.12);
}
.obs-open svg{width:20px;height:20px;color:var(--teal-hi)}
/* four icons, the language and the way out, on a 390px phone */
@media (max-width:420px){
  .top-in{padding:0 10px;gap:4px}
  .langtoggle button{padding:6px 7px;min-width:40px}
  .top img{height:27px;padding:3px 5px}
  .obs-title{font-size:24px}
}

/* ================================================================
   11  THE UNIVERSE — the group as a galaxy, Klever as a living map
   ================================================================
   The same glass as the observatory, over a bigger sky. The page does
   not scroll; the timeline sits at the foot, the reading at the head,
   and everything in between is the world.                            */
body[data-page="universe"]{padding-bottom:0;overflow:hidden;height:100%;background:#020506}
body[data-page="universe"] .top{background:rgba(2,5,6,.35);border-bottom-color:rgba(255,255,255,.05)}
body[data-page="universe"] .wrap{max-width:none;padding:0}
/* signed out there, the sign-in card sits in the ordinary column, not across a 3440 px screen */
body[data-page="agents"] .wrap.signing,body[data-page="universe"] .wrap.signing{max-width:640px;margin:0 auto;padding:0 18px}

.uni-wait{
  position:fixed;inset:0;display:flex;align-items:center;justify-content:center;margin:0;
  font-family:var(--mono);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--teal-hi);
  text-shadow:0 0 18px rgba(95,224,198,.5);animation:uniPulse 1.6s ease-in-out infinite alternate;
}
@keyframes uniPulse{from{opacity:.45}to{opacity:1}}
.uni-nogl{max-width:520px;margin:48px auto;padding:0 18px;color:var(--ink-2);font-size:15.5px;line-height:1.55}
.uni-nogl-links{display:flex;flex-direction:column;gap:4px;margin-top:10px}

.uni-hud{max-width:760px}
.uni-crumbs{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.uni-crumbs button{
  padding:3px 0;border:0;background:none;cursor:pointer;
  font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim);
}
.uni-crumbs button:hover{color:var(--ink)}
.uni-sep{font-family:var(--mono);font-size:12px;color:var(--dim)}
.uni.at-group .uni-crumbs button:first-child,
.uni.at-company .uni-crumbs button:last-child{color:var(--teal-hi);text-shadow:0 0 18px rgba(95,224,198,.5)}
.uni.at-group .uni-sep,.uni.at-group .uni-crumbs button:last-child{opacity:.5}
.uni-stats{
  margin:0;font-family:var(--mono);font-size:12px;color:var(--ink-2);line-height:1.5;
  text-shadow:0 1px 8px #000;font-variant-numeric:tabular-nums;
}

.uni-legend{bottom:calc(78px + env(safe-area-inset-bottom));flex-wrap:wrap;gap:8px 16px;padding:0 16px}
.uni.at-group .uni-legend{opacity:0}

/* the day, as a line you can drag */
.uni-time{
  position:fixed;left:50%;transform:translateX(-50%);bottom:calc(14px + env(safe-area-inset-bottom));z-index:6;
  width:min(760px,calc(100% - 24px));display:flex;align-items:center;gap:12px;padding:8px 12px 8px 8px;
  border-radius:18px;background:rgba(8,16,15,.62);border:1px solid rgba(255,255,255,.09);
  -webkit-backdrop-filter:blur(16px) saturate(1.3);backdrop-filter:blur(16px) saturate(1.3);
  box-shadow:0 18px 50px rgba(0,0,0,.45), inset 0 1px 0 rgba(255,255,255,.05);
  transition:opacity .3s ease;
}
.uni.picked .uni-time{opacity:0;pointer-events:none}
.uni-play{
  flex:none;width:40px;height:40px;border-radius:50%;cursor:pointer;
  font-size:13px;line-height:1;color:var(--teal-ink);
  background:linear-gradient(180deg,var(--teal-hi),var(--teal));border:0;
  box-shadow:0 0 22px rgba(95,224,198,.35);
}
.uni-clock{flex:none;min-width:44px;font-family:var(--mono);font-size:14px;font-weight:600;color:var(--ink);font-variant-numeric:tabular-nums}
.uni-track{position:relative;flex:1;min-width:0;height:34px;cursor:pointer;touch-action:none}
.uni-track::before{content:'';position:absolute;left:0;right:0;top:50%;height:2px;margin-top:-1px;border-radius:2px;background:rgba(255,255,255,.1)}
.uni-fill{position:absolute;left:0;top:50%;height:2px;margin-top:-1px;border-radius:2px;background:linear-gradient(90deg,rgba(95,224,198,.2),var(--teal-hi))}
.uni-head{
  position:absolute;top:50%;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;
  background:#eafffa;box-shadow:0 0 0 3px rgba(95,224,198,.3),0 0 16px rgba(95,224,198,.8);
}
.uni-tick{position:absolute;top:7px;bottom:7px;width:1px;background:rgba(255,255,255,.22)}
.uni-dot{position:absolute;top:50%;width:6px;height:6px;margin:-3px 0 0 -3px;border-radius:50%;opacity:.9}
.uni-live{
  flex:none;min-height:30px;padding:0 11px;border-radius:999px;cursor:pointer;
  font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
  color:var(--mut);background:rgba(255,255,255,.04);border:1px solid var(--line-2);
}
.uni-live.on{color:var(--teal-hi);border-color:var(--teal-line);background:var(--teal-bg)}
.uni-live.on::before{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:7px;vertical-align:1px;background:var(--teal-hi);box-shadow:0 0 8px var(--teal-hi);animation:uniPulse 1.2s ease-in-out infinite alternate}

/* names in the world */
.uni-co{
  display:flex;flex-direction:column;align-items:center;gap:1px;padding:5px 12px 6px;border-radius:14px;pointer-events:auto;
  background:rgba(8,14,13,.55);border:1px solid rgba(255,214,150,.22);
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);
}
.uni-co b{font-size:13px;font-weight:700;color:#fff1dc}
.uni-co span{font-family:var(--mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:#a39a8a}
.uni-co.live{border-color:var(--teal-line);box-shadow:0 0 26px rgba(95,224,198,.22)}
.uni-co.live b{color:#eafffa}
.uni-co.live span{color:var(--teal-hi)}
/* connected: people here have accounts, though the company is not drawn as a system */
.uni-co.on{border-color:rgba(95,224,198,.35)}
.uni-co.on span{color:#9fd8cb}
.uni-person{font-size:12px;color:#e3efeb}
.uni-sun{font-size:12.5px;font-weight:700;color:#ffe6bd;letter-spacing:.02em}
.uni-planet{
  display:flex;align-items:center;gap:6px;
  font-family:var(--mono);font-size:10.5px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
}
.uni-planet i{flex:none;width:7px;height:7px;border-radius:50%}
.uni-dept,.uni-amt{
  position:absolute;left:0;top:0;white-space:nowrap;pointer-events:none;transition:opacity .25s ease;will-change:transform;
}
.uni-dept{font-family:var(--mono);font-size:10px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;opacity:.8;text-shadow:0 1px 6px #000}
.uni-inst{font-size:11.5px;color:#ffd892;letter-spacing:.02em}
.uni-agent{font-size:11px}
.uni-feed.uni-amt{color:#c4f7ec;background:rgba(6,34,30,.62);border-color:rgba(95,224,198,.38)}
.uni-amt{
  padding:2px 8px;border-radius:8px;font-family:var(--mono);font-size:11.5px;font-weight:600;color:#ffe2a6;
  background:rgba(40,28,6,.55);border:1px solid rgba(255,199,94,.3);font-variant-numeric:tabular-nums;
}

/* the sheet's rows: a report, its state, its time */
.uni-reps{display:flex;flex-direction:column;margin:0 0 16px}
.uni-rep{display:flex;align-items:baseline;gap:10px;padding:8px 0;border-bottom:1px solid var(--line)}
.uni-rep i{flex:none;width:8px;height:8px;border-radius:50%;transform:translateY(-1px)}
.uni-rep-n{flex:1;min-width:0;font-size:14px;color:var(--ink)}
.uni-rep-t{flex:none;font-family:var(--mono);font-size:12px;color:var(--mut);font-variant-numeric:tabular-nums}
.uni-rep-t.over{color:var(--coral)}
.uni-ins .uni-rep-n{font-family:var(--serif);font-size:15px;line-height:1.45}
.uni .obs-sheet .obs-open{margin-top:6px;width:100%;cursor:pointer;font-family:var(--sans)}
@media (max-width:520px){
  .uni-time{gap:8px;padding:6px 8px 6px 6px}
  .uni-clock{min-width:40px;font-size:13px}
  .uni-legend{font-size:11px;bottom:calc(70px + env(safe-area-inset-bottom))}
}

/* ================================================================
   9  PRINT — the report as a document on letterhead. Unchanged.
   ================================================================ */
/* On screen it does not exist. On paper it is the only thing that does. */
.printdoc{display:none}

@media print{
  /* paper is paper, whatever the phone's theme */
  :root{
    color-scheme:light;
    --paper:#fff; --desk:#fff; --surface:#f4f5f2; --surface-2:#eceee9;
    --ink:#141b1a; --ink-2:#3a4442; --muted:#5f6a66;
    --rule:#cfd4cf; --rule-strong:#a9b2ac;
    --accent:#0f5c54; --accent-soft:#e3efec;
    --debit:#8f3020; --debit-soft:#f7eae6;
  }
  @page{margin:16mm 14mm}
  html,body{background:#fff!important}
  body{color:var(--ink);-webkit-print-color-adjust:exact;print-color-adjust:exact;padding:0}
  .top,.bar,.backlink,.toast,canvas,.navmore{display:none!important}
  body[data-page="form"] .wrap{display:none!important}
  .printdoc{display:block}
  /* any other page prints as it reads, dark ink on white */
  body:not([data-page="form"]){
    -webkit-print-color-adjust:economy;print-color-adjust:economy;
    --card:#fff;--card-2:#f4f5f2;--line:#cfd4cf;--line-2:#a9b2ac;
    --mut:#4a5552;--dim:#5f6a66;--teal-hi:#0f5c54;--teal-bg:#e3efec;--coral:#8f3020;--coral-bg:#f7eae6;
  }
  body:not([data-page="form"]) .wrap{max-width:none;padding:0}
  body:not([data-page="form"]) .wrap *{background:transparent!important;box-shadow:none!important;text-shadow:none!important;color:#141b1a!important}
  body:not([data-page="form"]) details{display:block}
  body:not([data-page="form"]) details > *{display:block!important}

  .pd-head{
    display:flex;align-items:flex-end;justify-content:space-between;gap:16px;
    border-bottom:2px solid var(--ink);padding-bottom:12px;
  }
  .pd-logo{height:52px;width:auto}
  .pd-head .brandword{font:700 22px/1 var(--sans);letter-spacing:.2em;color:#141b1a}
  .pd-kind{color:var(--accent)}
  .pd-title{
    font-family:var(--sans);font-size:22px;font-weight:700;margin:20px 0 14px;
    color:var(--ink);letter-spacing:-.01em;
  }
  .pd-meta{
    display:grid;grid-template-columns:max-content 1fr;gap:4px 18px;margin:0 0 6px;
    font-family:var(--mono);font-size:11px;
  }
  .pd-meta dt{color:var(--muted);padding-top:2px}
  .pd-meta dd{margin:0;color:var(--ink)}
  .pd-status{font-weight:600;color:var(--accent)}
  .pd-status.late{color:var(--debit)}

  .pd-sec{
    color:var(--accent);
    margin:20px 0 6px;padding-bottom:5px;border-bottom:1px solid var(--rule-strong);
    page-break-after:avoid;
  }
  .pd-flagsec{color:var(--debit);border-bottom-color:var(--debit)}
  .pd-tbl{width:100%;border-collapse:collapse;font-size:11pt}
  .pd-tbl tr{page-break-inside:avoid}
  .pd-tbl th{
    text-align:left;font-family:var(--sans);font-weight:500;color:var(--ink-2);
    padding:5px 12px 5px 0;vertical-align:top;width:58%;border-bottom:1px solid var(--rule);
  }
  .pd-tbl td{
    font-family:var(--mono);font-size:10.5pt;color:var(--ink);text-align:right;
    padding:5px 0;vertical-align:top;white-space:pre-line;border-bottom:1px solid var(--rule);
  }
  /* a long answer, and a list, across the page under their question —
     not squeezed right-aligned into the answer column */
  .pd-tbl td.pd-full{
    text-align:left;font-family:var(--sans);font-size:11pt;white-space:normal;padding:7px 0 9px;
  }
  .pd-tbl tr:has(.pd-list){page-break-inside:auto}
  .pd-q{color:var(--ink-2);font-weight:500;margin-bottom:5px}
  .pd-long{
    font-family:var(--serif);font-size:11pt;line-height:1.5;color:var(--ink);white-space:pre-line;
    padding-left:12px;border-left:2px solid var(--rule);overflow-wrap:anywhere;
  }
  .pd-tbl .pd-sub{width:100%;border-collapse:collapse;font-size:9.5pt}
  .pd-tbl .pd-sub th{
    width:auto;text-align:left;font-family:var(--sans);font-weight:600;font-size:8.5pt;color:var(--muted);
    padding:4px 10px 4px 0;vertical-align:bottom;border-bottom:1px solid var(--rule-strong);
  }
  .pd-tbl .pd-sub td{
    text-align:left;font-family:var(--sans);font-size:9.5pt;color:var(--ink);white-space:normal;
    padding:4px 10px 4px 0;vertical-align:top;border-bottom:1px solid var(--rule);overflow-wrap:anywhere;
  }
  .pd-tbl .pd-sub .n{text-align:right;font-family:var(--mono);white-space:nowrap;overflow-wrap:normal}
  .pd-tbl .pd-sub td.k{font-family:var(--mono);color:var(--accent);white-space:nowrap;overflow-wrap:normal}
  .pd-tbl .pd-sub th:last-child,.pd-tbl .pd-sub td:last-child{padding-right:0}
  .pd-tbl .pd-sub tr{page-break-inside:avoid}
  .pd-tbl .pd-sub tfoot td{border-bottom:0;font-weight:600;padding-top:6px}
  .pd-flags{margin:0;padding:0 0 0 16px}
  .pd-flags li{font-size:10.5pt;color:var(--debit);margin:4px 0;page-break-inside:avoid}

  .pd-sig{display:flex;gap:30px;margin-top:34px;page-break-inside:avoid}
  .pd-sigcell{flex:1}
  .pd-sigline{border-bottom:1px solid var(--ink-2);height:30px}
  .pd-siglbl{color:var(--muted);margin-top:5px}

  /* the tracked small capital, at print size */
  .pd-kind,.pd-sec,.pd-siglbl,.pd-meta dt{
    font-family:var(--sans);font-size:10px;font-weight:600;
    letter-spacing:.1em;text-transform:uppercase;
  }
}

/* ================================================================
   ROUND 2 — what has been sent, long text, the Chairman's page
   ================================================================ */
.chft,.chfh,.chinst,.chinsn,.chrr,.chfv,.chmissing,.chlater,.obs-said,.chtext{overflow-wrap:anywhere}
.tlrow.sent,.tlgroup.sent > summary{opacity:.62}
.tlrow.sent .tls,.tlgroup.sent .tls{color:var(--teal-hi)}
.tlsub a.sent{opacity:.62}
.deck-more.sent{color:var(--teal-hi)}
.person .count.done{color:var(--teal-hi);background:var(--teal-bg)}
.sentmark{font-size:12px;font-weight:600;color:var(--teal-hi)}
.fstat.none .fsp{color:var(--mut)}
.sentnote{margin-top:10px}
button.count{font:inherit;background:none;border:0;padding:0;color:inherit;text-align:left;cursor:default;
  min-height:44px;display:inline-flex;align-items:center}
button.count.findable{cursor:pointer}
.bar .btn.ghost{background:transparent;border:1px solid var(--line-2);color:var(--ink-2)}
.seg:focus,.ratio:focus{outline:2px solid var(--teal-hi);outline-offset:3px;border-radius:10px}

svg.sky .node text{font-size:11px}
.chchips{display:flex;flex-wrap:wrap;justify-content:center;gap:6px;margin:6px 2px 0}
.chchip{display:inline-flex;align-items:baseline;gap:6px;min-height:44px;align-items:center;padding:0 12px;border-radius:22px;border:1px solid var(--line-2);background:var(--card);color:var(--ink-2);font-family:var(--sans);font-size:12.5px;font-weight:600;cursor:pointer}
.chchip-h{font-size:11px;font-weight:500;color:var(--dim)}
.chchip.h1{border-color:var(--gold)} .chchip.h1 .chchip-h{color:var(--gold)}
.chchip.h2{border-color:var(--coral-line);background:var(--coral-bg)} .chchip.h2 .chchip-h{color:var(--coral)}
.chchip.brief{border-color:var(--teal-line);background:var(--teal-bg);color:var(--teal-hi)}
.chchip:focus-visible{outline:2px solid var(--teal-hi);outline-offset:2px}
.chlater{margin-top:8px;padding:12px 14px;border-radius:var(--r);background:var(--card);border:1px solid var(--line);font-size:13.5px;color:var(--mut);line-height:1.6}
.chlater .chfl{color:var(--dim);margin-bottom:6px;font-size:10.5px}
.chinsrow.cancelled .chinst{color:var(--mut);text-decoration:line-through}
.chinsrow.cancelled .chinsh .chrt{color:var(--dim)}
.chprev .codenote{text-align:left;margin:10px 4px}
.chprev .chsec{margin:14px 4px 6px}
.chprev .chchg{margin-top:8px}
.unerr{position:fixed;left:16px;right:16px;bottom:calc(16px + env(safe-area-inset-bottom));z-index:40;margin:0 auto;max-width:560px}

/* ---------- chat, round 2: earlier messages, the photo viewer, sign-out sheet ---------- */
.chat-back{min-height:44px;padding:0 16px 0 12px;font-size:14.5px}
.chat-more{display:block;margin:16px auto 0;min-height:44px;padding:0 20px;border-radius:999px;cursor:pointer;
  font-family:var(--sans);font-size:13.5px;font-weight:600;color:var(--ink-2);background:var(--card);border:1px solid var(--line-2)}
.chat-more:hover{border-color:var(--line-3);color:var(--ink)}
.chat-more:disabled{opacity:.55;cursor:default}
.chat-pill{flex:none;min-height:44px;padding:0 16px;border-radius:22px;cursor:pointer;white-space:nowrap;
  font-family:var(--sans);font-size:14.5px;font-weight:600;color:var(--ink-2);background:var(--card);border:1px solid var(--line-2)}
.chat-pill:hover{border-color:var(--line-3);color:var(--ink)}
.chat-pill:disabled{opacity:.45;cursor:not-allowed}
.chat-pill-bad{background:var(--coral-bg);color:var(--coral);border-color:var(--coral-line)}
.recbar .recdot.chat-recstop{animation:none;background:var(--gold)}
.chat-count{position:absolute;right:16px;top:-28px;padding:2px 9px;border-radius:999px;pointer-events:none;
  font-family:var(--mono);font-size:11px;color:var(--ink-2);background:var(--card-2);border:1px solid var(--line-2)}
.chan .chat-dot{flex:none;width:10px;height:10px;border-radius:50%;background:var(--teal-hi);box-shadow:0 0 0 3px var(--teal-bg)}
.msgimg{cursor:zoom-in}
.msgimg:focus-visible{outline:2px solid var(--teal-hi);outline-offset:2px;border-radius:12px}
.chat-viewer{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;
  padding:calc(16px + env(safe-area-inset-top)) 16px calc(16px + env(safe-area-inset-bottom));
  background:rgba(0,0,0,.94);touch-action:pan-x pan-y pinch-zoom}
.chat-viewer-img{display:block;max-width:100%;max-height:100%;object-fit:contain;border-radius:6px}
.chat-viewer-x{position:absolute;top:calc(10px + env(safe-area-inset-top));right:10px;width:48px;height:48px;border-radius:50%;cursor:pointer;
  display:flex;align-items:center;justify-content:center;font-size:28px;line-height:1;color:#fff;
  background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.25)}
.chat-sheet{position:fixed;left:12px;right:12px;bottom:calc(12px + env(safe-area-inset-bottom));z-index:50;max-width:520px;margin:0 auto;
  padding:16px;border-radius:var(--r);background:var(--card-2);border:1px solid var(--line-2);box-shadow:var(--shadow)}
.chat-sheet p{margin:0 0 12px;font-size:14.5px;line-height:1.45;color:var(--ink)}
.chat-sheet .chat-warn{color:var(--coral);background:var(--coral-bg);padding:9px 11px;border-radius:var(--r-s)}
.chat-sheet-row{display:flex;gap:8px;justify-content:flex-end}

/* ---------- a date box that shows "Wed 9 Sep 2026", not the computer's 09/09/2026 ---------- */
.datebox{position:relative;display:flex;align-items:center;gap:10px;min-height:46px;width:100%;min-width:0;
  padding:0 12px;border-radius:var(--r-s);background:var(--field);border:1px solid var(--line-2);color:var(--ink);
  font-family:var(--sans);font-size:15px;transition:border-color .15s ease, box-shadow .15s ease}
/* the two calendars sit side by side when they fit and on two lines when
   they do not — never cut short, since the Ethiopian half is the one read */
.datebox .dshow{flex:1;min-width:0;padding:6px 0;line-height:1.35}
.datebox .dshow > span{white-space:nowrap}
.datebox.empty .dshow{color:var(--dim)}
.datebox svg{flex:none;width:18px;height:18px;color:var(--mut)}
/* the real input, invisible, over the whole box: taps and the keyboard reach it */
.datebox input.dnative{position:absolute;inset:0;width:100%;height:100%;min-height:0;margin:0;padding:0;
  opacity:0;border:0;cursor:pointer;color-scheme:dark}
.datebox:focus-within{border-color:var(--teal-hi);box-shadow:0 0 0 3px rgba(95,224,198,.16)}
.datebox:has(input.miss){border-color:var(--coral);box-shadow:0 0 0 3px var(--coral-bg)}
.datebox:has(input:disabled){opacity:.7}
.datebox:has(input:disabled) input.dnative{cursor:not-allowed}

/* Send on a report with questions still empty: available, but not the bright "ready" button */
#send.partial{background:var(--card-2);color:var(--ink-2);border:1px solid var(--line-2);box-shadow:none}
#send.partial:hover{border-color:var(--gold);color:var(--ink)}

/* ---------- penalties and bonuses (the rulebook) ---------- */
.chchg.penalty .chinsh .chrt{color:var(--coral)}
.chchg.bonus .chinsh .chrt{color:var(--teal-hi)}
.chchg.consequence{border-color:rgba(227,181,71,.32)}
.chchg.consequence .chinsh .chrr{color:var(--gold)}
.chchg.pending{opacity:.72}
.chchg.pending .chinsh .chrt{color:var(--dim)}
.chmonth .chf .chfv{flex:none;width:86px;max-width:none}
.chfhead .chfv{font-family:var(--sans);font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--dim);white-space:nowrap}
.chfv.fine{color:var(--coral)}
.chfv.bonus{color:var(--teal-hi)}
.chfv.net{font-weight:600}
.chrec{margin:12px 0 0}
.chrec .chinsform{margin:10px 0 12px}
.chrec .chinsf span{width:64px}
.chrec select,.chrec .chinsf input{flex:1;min-width:0;max-width:100%}
.chrec input[type=text]{min-height:40px}
.chrecsrc{margin:0;padding:8px 11px;border-left:2px solid var(--teal-line);background:rgba(255,255,255,.03);
  font-family:var(--serif);font-size:13.5px;line-height:1.5;color:var(--ink-2);overflow-wrap:anywhere}
.chinsrow.bonus .chinsh .chrr{color:var(--teal-hi)}
.chinsrow.consequence .chinsh .chrr{color:var(--gold)}
@media (max-width:420px){ .chmonth .chf .chfv{width:68px;font-size:12px} }
/* the bonuses: this month so far */
.chstanding{margin:12px 0 0}
.chsofar .chf.chsf{align-items:flex-start;padding:9px 16px}
.chsf .chfk b{color:var(--ink);font-weight:600}
.chsf .chsfw{color:var(--mut)}
.chsf .chsfy{display:block;font-size:11.5px;color:var(--dim);margin-top:3px;line-height:1.45;overflow-wrap:anywhere}
.chsofar.off .chfv,.chsofar.unk .chfv{color:var(--dim)}
.chpaybox{margin:10px 0 0}
/* a table's added-up column */
.reptotal{margin:8px 6px 0;font-family:var(--mono);font-size:13.5px;font-weight:600;color:var(--teal-hi);text-align:right}

/* What the form counted from the rows, under the table it counted:
   "5 deliveries · 4 checked · 1 rejected · counted from your rows".
   It is an answer, not a hint, so it reads in the answer's colour — but it
   takes no box, because there is nothing to type into. */
.autoline{margin:2px 2px 10px;padding:9px 12px;border-radius:10px;
  background:var(--teal-bg);border:1px solid var(--teal-line);
  font-size:13px;line-height:1.7;color:var(--ink-2)}
/* each piece keeps its figure with its words, and moves to the next line
   whole when it does not fit — the pieces have no space between them, so as
   plain inline text the line could not break at all and pushed the page
   sideways ("1 still on installation · 0 no work today", 12 Oct 2026) */
.autoline .aval{display:inline-block;max-width:100%;font-family:var(--mono);font-weight:600;color:var(--teal-hi)}
.autoline .adot{display:inline-block;margin:0 7px;color:var(--line-3)}
.autoline .afrom{display:block;margin-top:2px;font-size:11.5px;color:var(--mut)}
/* a list the week wrote itself: shown, never typed */
.repwrap.gathered .gatheredrows{display:flex;flex-direction:column;gap:6px}
.repwrap.gathered .grow{padding:8px 11px;border-radius:9px;background:var(--teal-bg);
  border:1px solid var(--teal-line);display:flex;flex-wrap:wrap;gap:2px 14px}
.repwrap.gathered .gcell{font-size:12.5px;white-space:nowrap}
.repwrap.gathered .gk{color:var(--mut);margin-right:5px}
.repwrap.gathered .gv{font-family:var(--mono);color:var(--ink-2)}
.repwrap.gathered .gnone{padding:8px 2px;font-size:13px;color:var(--mut)}
/* the box of a two-box question that the form counts rather than asks */
.ratio input.locked{background:var(--teal-bg);border-color:var(--teal-line);
  color:var(--teal-hi);font-weight:600;cursor:default}
/* a worked-out answer that keeps a row of its own */
.fld.auto > label{color:var(--mut)}
.fld.auto .autoval{font-family:var(--mono);font-size:15px;font-weight:600;color:var(--teal-hi);
  align-self:center;padding:2px 0}
.chf.chftotal .chfk,.chf.chftotal .chfv{color:var(--teal-hi);font-weight:600}
/* the night's jobs: did each one work */
.chalarm{margin:14px 0 0;padding:12px 14px;border:1px solid var(--coral-line);border-left:4px solid var(--coral);
  background:var(--coral-bg);border-radius:var(--r-s);color:var(--ink);font-size:14px;line-height:1.5}
.chalarm[hidden]{display:none}
.chalarm p{margin:0;overflow-wrap:anywhere}
.chalarm p + p{margin-top:6px}
.chhealth{display:flex;flex-direction:column;gap:8px}
.chhrow{padding:10px 14px;background:var(--card);border:1px solid var(--line);border-radius:var(--r-s)}
.chhtop{display:flex;justify-content:space-between;gap:12px;align-items:baseline}
.chhk{font-weight:600;color:var(--ink)}
.chhv{font-family:var(--mono);font-size:12.5px;color:var(--mut);white-space:nowrap}
.chhrow.ok .chhv{color:var(--teal-hi)}
.chhrow.bad,.chhrow.late{border-color:var(--coral-line)}
.chhrow.bad .chhv,.chhrow.late .chhv{color:var(--coral)}
.chhw{font-size:12.5px;color:var(--dim);margin-top:3px;overflow-wrap:anywhere}
.chhe{font-family:var(--mono);font-size:12px;color:var(--coral);margin-top:5px;overflow-wrap:anywhere}
.chhe.warn{color:var(--gold)}
/* cancel a whole day's report fines */
.chchg.chall{border-style:dashed}
.chchg.chall .chrw{font-weight:600}

/* ================================================================
   LEADS & JOBS (register.html, js/register.js; 6 Oct 2026)
   ================================================================ */
.regnote{background:#081010;border:1px solid var(--teal-line);border-radius:var(--r-l);padding:14px 15px 12px;margin:0 0 6px}
.regnote-k{font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--teal-hi);margin-bottom:8px}
.regnote-t{font-family:var(--serif);font-size:15.5px;line-height:1.55;color:var(--ink);white-space:pre-line;overflow-wrap:anywhere}
.regnote-m{font-family:var(--mono);font-size:11.5px;color:var(--dim);margin-top:8px}
.chtile.regbad{border-color:var(--coral-line);background:var(--coral-bg)}
.chtile.regbad .chtv{color:var(--coral)}
.regtabs{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;padding:4px;margin:16px 0 10px;
  background:var(--field);border:1px solid var(--line-2);border-radius:13px}
.regtabs button{min-height:42px;border:0;border-radius:10px;background:transparent;cursor:pointer;padding:0 4px;
  font-size:13px;font-weight:600;color:var(--mut);font-variant-numeric:tabular-nums;line-height:1.2}
.regtabs button[aria-selected="true"]{background:var(--teal-hi);color:var(--teal-ink)}
.regtabs button.hasbad:not([aria-selected="true"]){color:var(--coral)}
.regsearch{width:100%;box-sizing:border-box;min-height:44px;margin:0 0 12px;padding:0 14px;font-size:16px;
  background:var(--field);color:var(--ink);border:1px solid var(--line-2);border-radius:12px}
.reglist{display:flex;flex-direction:column;gap:10px}
.regcard{display:block;width:100%;box-sizing:border-box;text-align:left;font:inherit;color:inherit;
  background:var(--card);border:1px solid var(--line);border-left:3px solid var(--teal-line);
  border-radius:var(--r);padding:12px 14px 13px}
.regcard.bad{border-left-color:var(--coral)}
.regjump{cursor:pointer}
.regjump:active{background:var(--card-2)}
.reghead{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:6px}
.regname{font-size:15px;font-weight:700;color:var(--ink);line-height:1.35;overflow-wrap:anywhere;min-width:0}
.regcode{font-family:var(--mono);font-weight:600;color:var(--teal-hi)}
.regno{font-size:13px;font-weight:500;color:var(--mut)}
.regchip{flex:none;font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:999px;white-space:nowrap;
  color:var(--teal-hi);background:var(--teal-bg);border:1px solid var(--teal-line)}
.regchip.bad{color:var(--coral);background:var(--coral-bg);border-color:var(--coral-line)}
.regmeta{font-family:var(--mono);font-size:12.5px;color:var(--ink-2);line-height:1.5;overflow-wrap:anywhere}
.regline{font-size:13.5px;color:var(--ink-2);line-height:1.5;margin-top:4px;overflow-wrap:anywhere}
.regline.regok{color:var(--teal-hi)}
.regprob{font-size:13.5px;color:var(--coral);line-height:1.45;margin-top:6px;overflow-wrap:anywhere}
.regnoteline{font-size:12.5px;color:var(--mut);line-height:1.45;margin-top:5px;overflow-wrap:anywhere}
.regtrail{font-family:var(--mono);font-size:11.5px;color:var(--dim);line-height:1.6;margin-top:8px;overflow-wrap:anywhere}
.regtrack{display:grid;grid-template-columns:repeat(15,1fr);gap:2px;margin:4px 0 8px}
.regtrack span{height:4px;border-radius:2px;background:var(--line-2)}
.regtrack span.on{background:var(--teal-hi)}
.regcard.bad .regtrack span.on{background:var(--coral)}
/* on his page: the summary, and the way in */
.chreg{background:var(--card);border:1px solid var(--line);border-radius:var(--r);padding:13px 15px}
.chreg-l{font-size:14.5px;color:var(--ink);line-height:1.5}
.chreg-l.bad{color:var(--coral)}
.chreg .obs-open{margin:12px 0 0}
/* his table: one row a customer, every step a column; it slides sideways
   inside its box, the name column staying put */
.regtable-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--line);border-radius:var(--r);background:var(--card)}
.regtable{border-collapse:separate;border-spacing:0;min-width:1180px;width:100%;font-size:13px}
.regtable th{background:var(--card-2);color:var(--dim);font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;
  text-align:left;padding:10px;white-space:nowrap;border-bottom:1px solid var(--line-2)}
.regtable td{padding:10px;border-bottom:1px solid var(--line);white-space:nowrap;color:var(--ink-2);font-variant-numeric:tabular-nums;vertical-align:middle}
.regtable tbody tr:last-child td{border-bottom:0}
.regtable .c{position:sticky;left:0;z-index:1;min-width:120px;max-width:150px;white-space:normal;overflow-wrap:anywhere;
  font-weight:700;color:var(--ink);background:var(--card);box-shadow:1px 0 0 var(--line-2)}
.regtable th.c{background:var(--card-2);z-index:2}
.regtable tr.bad td.c{box-shadow:inset 3px 0 0 var(--coral),1px 0 0 var(--line-2)}
.regtable td.dim{color:var(--dim)}
.regtable td.bad{color:var(--coral);font-weight:600}
.regtable td.regcode{font-family:var(--mono);font-weight:500;color:var(--teal-hi)}
.regtable tbody tr{cursor:pointer}
.regtable tbody tr:active td{background:var(--card-2)}
/* where a customer stands: the status, and why */
.regstand{display:flex;align-items:flex-start;gap:8px;margin:2px 0 4px;flex-wrap:wrap}
.regst{flex:none;font-size:11.5px;font-weight:700;padding:3px 9px;border-radius:999px;white-space:nowrap;border:1px solid var(--line-2);color:var(--ink-2)}
.regst.moving{color:var(--teal-hi);background:var(--teal-bg);border-color:var(--teal-line)}
.regst.done{color:var(--teal-hi);border-color:var(--teal-line)}
.regst.hold{color:var(--gold);background:var(--gold-bg);border-color:rgba(227,181,71,.4)}
.regst.rework{color:var(--coral);background:var(--coral-bg);border-color:var(--coral-line)}
.regst.quiet{color:var(--mut)}
.regwhy{font-size:13.5px;color:var(--ink);line-height:1.45;overflow-wrap:anywhere;flex:1;min-width:160px}
.regaitag{font-family:var(--mono);font-size:10.5px;color:var(--dim);margin-top:5px}
.regtable td.regwhycell{white-space:normal;min-width:220px;max-width:300px;line-height:1.4;color:var(--ink)}
.regtable{min-width:2300px}
/* the universe: customers' names, and their stars in the legend */
.obs3d-label.uni-cust{font-size:11.5px;font-weight:600;letter-spacing:.01em;opacity:.95}
.uni-leg-cust b{font-weight:400;margin:0 2px 0 6px}
/* the AI's reading, in the universe's heading (the observatory joined it) */
.uni-ai{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px;margin-top:8px}
.uni-ai[hidden]{display:none}
.uni-ai-t{font-family:var(--mono);font-size:11.5px;letter-spacing:.02em;color:var(--teal-hi);text-shadow:0 1px 6px rgba(0,0,0,.85)}
.uni-ai.loud .uni-ai-t{color:var(--coral)}
.uni-ai-go{min-height:32px;padding:0 12px;border-radius:999px;cursor:pointer;font:600 12.5px var(--sans);
  color:var(--teal-hi);background:rgba(10,24,22,.72);border:1px solid var(--teal-line)}
.uni-ai-go:disabled{opacity:.7;cursor:default}
/* the AI's findings in the universe's sheets */
.uni-find-k{display:block;width:100%;text-align:left;margin:14px 0 4px;padding:0;border:0;background:none;cursor:pointer;
  font:700 11.5px var(--sans);letter-spacing:.1em;text-transform:uppercase;color:var(--teal-hi)}
.uni-find-k.loud{color:var(--coral)}
.uni-find-k.warm{color:var(--gold)}
.uni-find-k.none{color:var(--mut)}
div.uni-find-k{cursor:default}
.obs-said.uni-find{margin-top:2px}
.uni-ai-read{color:var(--ink);border-color:var(--line-3)}
/* the AI's morning list among his orders (Team.js) */
.chord-ai{border-left:3px solid var(--teal-hi)}
.chord-ai > .chask-note{margin:0 0 10px}

/* ================================ MOTION ================================
   12 Oct 2026, the Chairman: "upgrade the animation". Movement that says
   something — what just changed, what opened, that a tap landed, that the
   report went — and never decoration that holds up the work: everything
   is over in under half a second, moves only transform and opacity (or a
   shadow) so a cheap phone keeps up, and none of it plays for anyone whose
   phone asks for less motion. The hooks are in js/app.js (anim-in, replay)
   and js/chat.js (arrive). */
:root{--ease-out:cubic-bezier(.2,.8,.2,1);--ease-pop:cubic-bezier(.34,1.56,.64,1)}

@media (prefers-reduced-motion:no-preference){
  /* the first view of a page rises in, a beat apart. Only the first: the
     home page redraws itself every minute. Not on chat or the universe,
     whose fixed bars would ride along with a moving container. */
  html.anim-in body:not([data-page="chat"]):not([data-page="universe"]) #app > *{
    animation:mRise .42s var(--ease-out) backwards}
  html.anim-in #app > :nth-child(2){animation-delay:.04s}
  html.anim-in #app > :nth-child(3){animation-delay:.08s}
  html.anim-in #app > :nth-child(4){animation-delay:.12s}
  html.anim-in #app > :nth-child(5){animation-delay:.16s}
  html.anim-in #app > :nth-child(6){animation-delay:.2s}
  html.anim-in #app > :nth-child(7){animation-delay:.24s}
  html.anim-in #app > :nth-child(n+8){animation-delay:.28s}
  html.anim-in body[data-page="form"] .bar{animation:mBarUp .45s var(--ease-out) .12s backwards}
  /* the deadline ring draws itself round to where the time stands */
  html.anim-in .ringarc{animation:mRingIn 1s var(--ease-out) .15s backwards}

  /* a tap that landed: the chip or button pops once */
  .chips .chip.tap,.seg button.tap{animation:mPop .28s var(--ease-pop)}
  .chips .chip:active,.seg button:active,.addrow:active,.reports a:active{transform:scale(.97)}
  .btn:active,.codego:active,.deck-go:active,.next-go:active{transform:translateY(1px) scale(.985)}

  /* a follow-up question opens under the answer that asked for it */
  .follow.opened{animation:mFollow .34s var(--ease-out)}

  /* a figure the form worked out glows when it changes; the line of
     figures under a list does too */
  .flash{animation:mFlash .8s var(--ease-out)}
  .autoline.flash{animation:mLineFlash .8s var(--ease-out)}
  /* a section all answered: its count turns to a tick with a pop */
  fieldset legend .lgc.full{animation:mPop .4s var(--ease-pop)}
  /* the "still empty" count pops as it goes down; "Ready" arrives */
  .bar .count b.tap{display:inline-block;animation:mPop .3s var(--ease-pop)}
  .bar .count.tap{animation:mPop .4s var(--ease-pop)}
  /* the bar along the top fills smoothly */
  .progress i{transition:width .45s var(--ease-out)}

  /* a row just added to a list rises in */
  .reprow.fresh{animation:mRise .32s var(--ease-out)}

  /* sent: the button pops and a ring goes out from it */
  .bar .btn.sentok{position:relative;animation:mPop .4s var(--ease-pop)}
  .bar .btn.sentok::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
    animation:mRipple .9s ease-out forwards}

  /* the home page's one thing to do, within the hour: it breathes */
  .deck-go.soon{position:relative}
  .deck-go.soon::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;
    animation:mHalo 2.4s ease-out infinite}

  /* a message that arrives while the channel is open slides in */
  .msg.arrive{animation:mMsg .3s var(--ease-out)}
  .msg.own.arrive{animation-name:mMsgOwn}

  /* the little note at the bottom comes up with a small bounce */
  .toast{transition:opacity .2s ease,transform .32s var(--ease-pop)}
}

@keyframes mRise{from{opacity:0;transform:translateY(12px)}}
@keyframes mBarUp{from{transform:translateY(100%)}}
@keyframes mRingIn{from{stroke-dashoffset:var(--c)}}
@keyframes mPop{0%{transform:scale(.92)}60%{transform:scale(1.04)}100%{transform:none}}
@keyframes mFollow{from{opacity:0;transform:translateY(-8px)}}
@keyframes mFlash{0%{color:var(--teal-hi);text-shadow:0 0 14px rgba(95,224,198,.85)}}
@keyframes mLineFlash{0%{background:rgba(95,224,198,.22);box-shadow:0 0 0 3px rgba(95,224,198,.3)}}
@keyframes mRipple{0%{box-shadow:0 0 0 0 rgba(95,224,198,.55)}100%{box-shadow:0 0 0 18px rgba(95,224,198,0)}}
@keyframes mHalo{0%{box-shadow:0 0 0 0 rgba(95,224,198,.42)}70%,100%{box-shadow:0 0 0 12px rgba(95,224,198,0)}}
@keyframes mMsg{from{opacity:0;transform:translate(-8px,6px)}}
@keyframes mMsgOwn{from{opacity:0;transform:translate(8px,6px)}}

/* ---- colour codes picked by picture (13 Oct 2026) ---- */
.colcell .colpick{display:flex;align-items:center;gap:10px;width:100%;min-height:var(--tap);padding:6px 12px;border:1px solid var(--line-2);border-radius:var(--r-s);background:var(--field);color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.colcell .colpick:focus-visible{outline:2px solid var(--teal-hi);outline-offset:2px}
.colsw{width:36px;height:36px;border-radius:8px;object-fit:cover;flex:none;box-shadow:inset 0 0 0 1px var(--line-3);background:var(--raise)}
.colsw.big{width:100%;height:auto;aspect-ratio:1/1}
.colsw.none{display:inline-flex;align-items:center;justify-content:center;color:var(--mut);font-weight:600}
.colcode{font-family:var(--mono);font-weight:600;font-size:15px}
.colchange{margin-left:auto;font-size:13px;color:var(--mut)}
.colnone{color:var(--teal-hi);font-weight:600}
body.noscroll{overflow:hidden}
.colsheet-back{position:fixed;inset:0;z-index:70;background:rgba(0,0,0,.6);display:flex;align-items:flex-end;justify-content:center}
.colsheet{background:var(--bg-2);width:100%;max-width:640px;max-height:88vh;border-radius:var(--r-l) var(--r-l) 0 0;display:flex;flex-direction:column;box-shadow:var(--shadow);padding-bottom:env(safe-area-inset-bottom)}
.colsheet-top{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;border-bottom:1px solid var(--line-2)}
.colsheet-title{font-weight:700;font-size:16px;color:var(--ink)}
.colsheet-x{width:var(--tap);height:var(--tap);border:0;border-radius:50%;background:var(--raise);color:var(--ink);font-size:22px;cursor:pointer}
.colsheet-body{overflow-y:auto;padding:4px 16px 24px;-webkit-overflow-scrolling:touch}
.colgroup{font-family:var(--mono);font-size:12px;letter-spacing:.08em;color:var(--mut);margin:16px 0 8px}
.colgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.coltile{display:flex;flex-direction:column;align-items:stretch;gap:4px;padding:4px;border:2px solid transparent;border-radius:12px;background:none;color:var(--ink-2);cursor:pointer;min-width:0}
.coltile.on{border-color:var(--teal-hi);background:var(--teal-bg)}
.coltile:focus-visible{outline:2px solid var(--teal-hi);outline-offset:1px}
.coltile-code{font-family:var(--mono);font-size:11px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.colown{display:flex;gap:8px;margin-top:20px}
.colown input{flex:1;min-width:0;min-height:var(--tap);padding:0 12px;border:1px solid var(--line-2);border-radius:var(--r-s);background:var(--field);color:var(--ink);font:inherit}
.colclear{margin-top:12px;width:100%;min-height:var(--tap);border:1px dashed var(--line-3);border-radius:var(--r-s);background:none;color:var(--mut);font:inherit;cursor:pointer}
@media (min-width:520px){.colgrid{grid-template-columns:repeat(6,minmax(0,1fr))}}
.regcols{display:inline-flex;flex-wrap:wrap;gap:6px 12px;vertical-align:middle}
.regcol{display:inline-flex;align-items:center;gap:6px}
.regsw{width:22px;height:22px;border-radius:5px;object-fit:cover;box-shadow:inset 0 0 0 1px var(--line-3);background:var(--raise);flex:none}
.regsw.none{display:inline-flex;align-items:center;justify-content:center;font-size:11px;color:var(--mut)}
.regcol-t{font-family:var(--mono);font-size:12.5px}
.regcolcell .regcols{flex-wrap:nowrap}

/* ---------------------------------------------------------------- *
 *  THE FACTORY GATE'S TABLET (gate.html, js/gate.js, 14 Oct 2026)    *
 *  Read from a step away, by people who may not read English: big    *
 *  Amharic first, English small under it; one colour per answer.     *
 * ---------------------------------------------------------------- */
body.gatepage{padding:0;overflow-x:hidden}
#gate{min-height:100vh;min-height:100dvh}
.gtw .gtam{font-weight:700;line-height:1.25}
.gtw .gten{color:var(--mut);font-size:.72em;line-height:1.3;margin-top:2px}
.gtscreen{position:relative;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:20px;
  min-height:100vh;min-height:100dvh;padding:20px;box-sizing:border-box;align-items:center}
.gtcam{position:relative;width:100%;aspect-ratio:4/3;border-radius:22px;overflow:hidden;background:#000;
  box-shadow:inset 0 0 0 1px var(--line-2)}
.gtvideo{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}
.gtring{position:absolute;inset:0;border-radius:22px;box-shadow:inset 0 0 0 6px transparent;transition:box-shadow .25s ease;pointer-events:none}
.gtring.near{box-shadow:inset 0 0 0 6px var(--line-3)}
.gtring.far{box-shadow:inset 0 0 0 6px rgba(255,255,255,.08)}
.gtring.good{box-shadow:inset 0 0 0 10px var(--teal-hi)}
.gtring.late{box-shadow:inset 0 0 0 10px var(--gold)}
.gtring.again{box-shadow:inset 0 0 0 10px #8fb3ff}
.gtside{display:flex;flex-direction:column;gap:18px;min-width:0}
.gtclock{display:flex;flex-direction:column;gap:2px}
.gttime{font-size:clamp(40px,7vw,76px);font-weight:700;letter-spacing:-.02em;line-height:1}
.gttime2{font-size:clamp(16px,2.2vw,22px);color:var(--ink-2);font-weight:600}
.gtdate{font-size:clamp(16px,2vw,21px);margin-top:6px}
.gtsay{font-size:clamp(22px,3.4vw,36px);min-height:2.6em}
.gtsay.gtUnknown .gtam,.gtsay.gtNoEngine .gtam{color:var(--gold)}
.gtanswer:empty{display:none}
.gtresult{display:flex;gap:18px;align-items:center;padding:18px;border-radius:20px;background:var(--card);
  box-shadow:inset 0 0 0 2px var(--teal-line);animation:gtin .25s ease-out}
.gtresult.late{box-shadow:inset 0 0 0 2px var(--gold);background:var(--gold-bg)}
.gtresult.again{box-shadow:inset 0 0 0 2px rgba(143,179,255,.6)}
.gtresult.good{background:var(--teal-bg)}
.gtresulttxt{min-width:0;display:flex;flex-direction:column;gap:6px}
.gtname{font-size:clamp(26px,3.6vw,40px)}
.gtstatus{font-size:clamp(20px,2.8vw,30px)}
.gtresult.good .gtstatus .gtam{color:var(--teal-hi)}
.gtresult.late .gtstatus .gtam{color:var(--gold)}
.gtsmall{font-size:15px;color:var(--ink-2)}
@keyframes gtin{from{transform:scale(.97);opacity:0}to{transform:none;opacity:1}}
.gtav{width:64px;height:64px;border-radius:50%;object-fit:cover;flex:none;background:var(--raise);
  box-shadow:inset 0 0 0 1px var(--line-3)}
.gtav.big{width:120px;height:120px}
.gtini{display:flex;align-items:center;justify-content:center;font-weight:700;font-size:26px;color:var(--ink-2)}
.gtini.none{color:var(--coral);font-size:22px}
.gtbtn{display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:64px;
  padding:10px 22px;border-radius:16px;border:0;cursor:pointer;font-family:var(--sans);color:var(--ink);
  background:var(--raise);box-shadow:inset 0 0 0 1px var(--line-3);text-decoration:none;-webkit-tap-highlight-color:transparent}
.gtbtn:active{transform:scale(.98)}
.gtbtn:disabled{opacity:.5;cursor:default}
.gtbam{font-size:20px;font-weight:700;line-height:1.2}
.gtben{font-size:13px;color:var(--mut);line-height:1.25}
.gtbtn.gtyes{background:var(--teal);color:var(--teal-ink);box-shadow:none}
.gtbtn.gtyes .gtben{color:rgba(3,32,25,.75)}
.gtbtn.gtghost{background:transparent}
.gtbtn.danger .gtbam{color:var(--coral)}
.gtbtn.armed{box-shadow:inset 0 0 0 2px var(--coral)}
.gtbtn.gtpick.on{box-shadow:inset 0 0 0 2px var(--teal-hi);background:var(--teal-bg)}
.gttap{min-height:84px;width:100%}
.gttap .gtbam{font-size:26px}
.gttap.glow{box-shadow:inset 0 0 0 3px var(--gold);animation:gtpulse 1.6s ease-in-out infinite}
@keyframes gtpulse{50%{box-shadow:inset 0 0 0 3px rgba(227,181,71,.35)}}
.gtqueue{font-size:16px;color:var(--gold)}
.gtqueue:empty{display:none}
.gtcorner{position:absolute;left:12px;bottom:10px;height:40px;padding:0 14px;border-radius:20px;border:0;background:var(--raise);
  box-shadow:inset 0 0 0 1px var(--line-3);color:var(--ink-2);font:500 14px var(--sans);cursor:pointer;opacity:.8;z-index:2}
.gtlayer{display:none}
.gtlayer.on{display:flex;flex-direction:column;position:fixed;inset:0;z-index:20;background:rgba(6,11,10,.985);
  padding:20px;box-sizing:border-box;overflow-y:auto;gap:16px}
.gtlayerhead{display:flex;justify-content:space-between;align-items:center;gap:16px;font-size:clamp(24px,3.2vw,34px)}
.gtnames{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:12px}
.gtnamebtn{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:16px;border:0;cursor:pointer;
  background:var(--card);box-shadow:inset 0 0 0 1px var(--line-2);color:var(--ink);text-align:left;font-family:var(--sans);min-height:84px}
.gtnamebtn:active{background:var(--raise)}
.gtnamewords{display:flex;flex-direction:column;min-width:0}
.gtconfirm{margin:auto;display:flex;flex-direction:column;align-items:center;gap:16px;text-align:center;font-size:clamp(24px,3.2vw,34px)}
.gtsnap{width:min(260px,60vw);height:min(260px,60vw);border-radius:20px;object-fit:cover;box-shadow:inset 0 0 0 1px var(--line-3)}
.gtrow{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;align-items:center}
.gtform{display:flex;flex-direction:column;gap:16px;max-width:520px;margin:auto;width:100%}
.gtform.solo{min-height:100vh;min-height:100dvh;justify-content:center;padding:20px;box-sizing:border-box}
.gtsub{font-size:clamp(22px,3vw,30px)}
.gtnote{font-size:15px;color:var(--ink-2)}
.gtnote.bad .gtam{color:var(--gold)}
.gtinput{min-height:56px;border-radius:14px;border:0;padding:0 16px;font:600 18px var(--sans);color:var(--ink);
  background:var(--field);box-shadow:inset 0 0 0 1px var(--line-3)}
.gtinput:focus{outline:none;box-shadow:inset 0 0 0 2px var(--teal-hi)}
.gtwait{padding:40px 20px;text-align:center}
.gttoast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:40;max-width:min(92vw,560px);
  padding:14px 20px;border-radius:16px;background:var(--raise);box-shadow:0 10px 30px rgba(0,0,0,.5),inset 0 0 0 1px var(--line-3);font-size:18px}
.gtenrol{max-width:760px;margin:0 auto;padding:18px 16px 60px;display:flex;flex-direction:column;gap:14px;box-sizing:border-box}
.gtenrol.cap .gtcam{max-width:560px;margin:0 auto}
.gtenrolhead{display:grid;grid-template-columns:1fr auto;gap:4px 12px;align-items:center;font-size:24px}
.gtenrolhead .gtsmall{grid-column:1}
.gtenrolhead .gtbtn{grid-row:1/3;grid-column:2}
.gtcount{font-size:18px;color:var(--teal-hi)}
.gtlist{display:flex;flex-direction:column;gap:8px}
.gtout{padding:12px 14px;border-radius:16px;box-shadow:inset 0 0 0 1px var(--line-3);display:flex;flex-direction:column;gap:10px;align-items:flex-start}
.gthome{text-decoration:none;align-self:center}
.gtlrow{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;padding:10px 12px;border-radius:16px;
  background:var(--card);box-shadow:inset 0 0 0 1px var(--line-2)}
.gtlrow.has{box-shadow:inset 0 0 0 1px var(--teal-line)}
.gtlname{min-width:0}
.gtlacts{display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end}
.gtlacts .gtbtn{min-height:52px;padding:6px 14px}
.gtdots{display:flex;gap:10px;justify-content:center}
.gtdot{width:16px;height:16px;border-radius:50%;background:var(--raise);box-shadow:inset 0 0 0 1px var(--line-3)}
.gtdot.on{background:var(--teal-hi);box-shadow:none}
@media (orientation:portrait),(max-width:760px){
  .gtscreen{grid-template-columns:1fr;align-content:start;gap:14px;padding:14px 16px 64px}
  .gtcam{max-height:46vh}
  .gtav.big{width:88px;height:88px}
  .gtresult{padding:14px;gap:14px}
  .gtlrow{grid-template-columns:auto 1fr}
  .gtlacts{grid-column:1/-1;justify-content:flex-start}
}
@media (prefers-reduced-motion:reduce){
  .gtresult,.gttap.glow{animation:none}
  .gtring{transition:none}
}

/* the gate on Amaha's page and the Chairman's: the picture each scan took */
.gtpic{width:44px;height:44px;border-radius:10px;object-fit:cover;flex:none;background:var(--raise);box-shadow:inset 0 0 0 1px var(--line-2);cursor:zoom-in}
.gtpic:not([src]){visibility:hidden}
.gtpic.big{width:200px;height:200px;cursor:zoom-out}
.gtcheck{display:flex;gap:12px;align-items:flex-start;padding:10px 0;border-top:1px solid var(--line)}
.gtcheck .gtpic{width:96px;height:96px}
.gtcheck .gtpic.big{width:200px;height:200px}
.gtgo{display:inline-flex;align-items:center;text-decoration:none;justify-self:start;width:max-content}
.gthead .gtgo{margin-top:8px}
.gtnoface{color:var(--gold)}
.chf.gtrow2{display:grid;grid-template-columns:44px minmax(0,1fr);gap:2px 12px;align-items:center}
.chf.gtrow2 .gtpic{grid-row:1/3;align-self:center}
.chf.gtrow2 .chfk,.chf.gtrow2 .chfv{grid-column:2;margin:0;text-align:left;justify-self:start}
.chf.gtrow2 .chfv{white-space:normal}
.atdl .gtwhy{grid-column:1/-1;justify-self:start;min-height:34px;margin-top:4px}
.atdl .atask{grid-column:1/-1}
.gtpics{display:flex;gap:6px;flex:none}
@media (max-width:480px){.gtcheck{flex-wrap:wrap}.gtcheck>div:last-child{flex:1 1 220px}}
/* a reader's long figure wraps rather than being cut (bug hunt, 15 Oct 2026) */
.chtile.long .chtv{white-space:normal;overflow-wrap:anywhere;font-size:16px;line-height:1.25}
.chinsauto{margin-top:10px}
.chinsauto>summary{cursor:pointer;color:var(--mut);font-size:13px;padding:6px 0}
.prchip.short{color:var(--gold);border-color:var(--gold);background:var(--gold-bg)}
/* the gate's password: hidden as typed, never offered for saving (bug hunt, 15 Oct 2026) */
.gtsecret{-webkit-text-security:disc;text-security:disc}
/* the holidays card on the Chairman's page (15 Oct 2026) */
.chholist .chinsrow{display:flex;align-items:center;justify-content:space-between;gap:10px}
.chholist .chinsrow.done .chrt{color:var(--mut)}
.chhoadd{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.chhoadd input{font:inherit;font-size:16px;min-height:44px;padding:0 10px;border:1px solid var(--line-2);border-radius:10px;background:var(--card-2,var(--card));color:var(--ink)}
.chhoadd input[type=text]{flex:1 1 180px;min-width:0}
.chhoadd .chmini{min-height:44px}

/* ---------- Amaha's production team (17 Oct 2026, js/app.js teamCard) ---------- */
.tmcard .tmlist{padding-bottom:6px}
.tmall summary{cursor:pointer;min-height:40px;display:flex;align-items:center;margin-top:6px}
.tmrow{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;justify-content:space-between;padding:9px 0;border-top:1px solid var(--line)}
.tmrow.gone .tmn{color:var(--dim)}
.tmname{flex:1 1 160px;min-width:0}
.tmn{font-size:14.5px;font-weight:600;color:var(--ink);overflow-wrap:anywhere}
.tmacts{display:flex;flex-wrap:wrap;gap:6px;align-items:center;justify-content:flex-end}
.tmacts .datebox{min-width:0;flex:1 1 180px}
.tmacts .mfpick,.tmacts .pushbtn{min-height:40px}
.tmaddbtn{margin-top:10px}
.tmform{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.tmform input[type=text]{min-height:44px;width:100%}
.tmlab{font-size:12.5px;color:var(--mut);margin-top:6px}
.tmjobs{display:flex;flex-wrap:wrap;gap:6px}
.tmbar{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.tmgone{margin-top:10px}
.tmgone summary{cursor:pointer;color:var(--mut);font-size:13.5px;min-height:36px;display:flex;align-items:center}
.tmch .tmchrow{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;justify-content:space-between;padding:8px 0;border-top:1px solid var(--line);font-size:14px}
.tmch .tmchrow .codenote{margin:2px 0 0;text-align:left}
