:root{color-scheme:dark light;--bg:#101418;--fg:#e8edf2;--card:#1a2129;--mut:#8b98a5;--acc:#4da3ff;--acc-text:#4da3ff;--bad:#ff6b6b;--ok:#4cd08a}
@media (prefers-color-scheme:light){:root{--bg:#f4f6f8;--fg:#14202b;--card:#fff;--mut:#5b6875;--acc-text:#0b5fd0;--ok:#0a7a3e;--bad:#c62828}}
*{box-sizing:border-box}
html[data-size=big]{font-size:125%}html[data-size=huge]{font-size:150%}
#size{font-weight:700}html[data-size=big] #size{font-size:1.15em}html[data-size=huge] #size{font-size:1.3em}
body{margin:0;background:var(--bg);color:var(--fg);font:1rem/1.45 system-ui,-apple-system,sans-serif;padding:env(safe-area-inset-top) 12px env(safe-area-inset-bottom)}
header{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:4px 8px;padding:8px 0}
h1{font-size:1.1rem;margin:0}h2{font-size:1rem;margin:0 0 6px;color:var(--mut);text-transform:uppercase;letter-spacing:.04em}
section,form{background:var(--card);border-radius:12px;padding:12px;margin:0 0 12px}
label{display:block;margin-bottom:10px}label span{display:block;color:var(--mut);font-size:.85rem}
input,textarea{width:100%;font:inherit;padding:12px;border-radius:8px;border:1px solid var(--mut);background:var(--bg);color:var(--fg)}
button{font:inherit;padding:12px 16px;border:0;border-radius:8px;background:var(--acc);color:#001;min-height:44px}
button.ghost{background:transparent;color:var(--acc-text);border:1px solid var(--acc);padding:6px 10px;min-height:36px}
ul{list-style:none;margin:0;padding:0}li{padding:6px 0;border-bottom:1px solid #8883}li:last-child{border:0}
pre{white-space:pre-wrap;word-break:break-word;margin:0;font:13px/1.4 ui-monospace,Consolas,monospace;max-height:50vh;overflow:auto}
.muted{color:var(--mut);font-size:.85rem}.err{color:var(--bad);overflow-wrap:anywhere}.ok{color:var(--ok)}
.pill{display:inline-block;padding:1px 8px;border-radius:99px;background:#8883;font-size:.8rem;margin-left:6px}
[hidden]{display:none!important}
.chat{display:flex;flex-direction:column;gap:6px;max-height:55vh;min-height:120px;overflow-y:auto;padding:6px 2px;-webkit-overflow-scrolling:touch}
.bubble{max-width:85%;padding:8px 12px;border-radius:14px;word-break:break-word}
.bubble .txt{white-space:pre-wrap}
.bubble .meta{font-size:.72rem;opacity:.7;margin-top:2px}
.bubble.me{align-self:flex-end;background:var(--acc);color:#001;border-bottom-right-radius:4px}
.bubble.them{align-self:flex-start;background:#8883;border-bottom-left-radius:4px}
.statusline{align-self:center;font-size:.8rem;color:var(--mut);text-align:center;padding:2px 8px;white-space:pre-wrap;word-break:break-word}
.divider{align-self:stretch;text-align:center;font-size:.75rem;color:var(--ok);border-top:1px solid var(--ok);margin:4px 0;padding-top:2px}
.composer{display:flex;gap:8px;align-items:flex-end;padding:0;margin:8px 0 0;background:transparent}
.composer textarea{flex:1;resize:none;font-size:16px}
.logitem{cursor:pointer;padding:10px 0}.logitem:focus{outline:2px solid var(--acc)}
.ltitle{word-break:break-word}
#lv{position:fixed;inset:0;z-index:10;display:flex;flex-direction:column;background:var(--bg);padding:env(safe-area-inset-top) 8px env(safe-area-inset-bottom)}
body.lvopen{overflow:hidden}
.lvbar{padding:6px 0;border-bottom:1px solid #8883}
.lvrow{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:3px 0}
.lvrow button{padding:4px 12px;min-height:44px}.lvrow button.on{background:var(--acc);color:#001}
.lvtitle{font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lvline{width:5.5em;padding:6px 8px;min-height:44px}
.lvstate{font-weight:600;font-size:.85rem}.lvstate.on{color:var(--ok)}.lvstate.pause{color:#e0a43a}.lvstate.off{color:var(--mut)}
#lvBody{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;position:relative;font:.8125rem/1.4 ui-monospace,Consolas,monospace}
.ll{display:flex;gap:6px;padding:2px 0;border-bottom:1px solid #8881}.ll.sub{padding-left:14px;opacity:.85}
.ll.ph{height:34px;box-sizing:border-box;align-items:center;padding:0 8px;border-bottom-color:transparent}.ll.ph .sk{display:block;height:.8rem;width:72%;border-radius:6px;background:linear-gradient(90deg,#8882 25%,#8885 50%,#8882 75%);background-size:200% 100%;animation:skel 1.2s linear infinite}.ll.ph:nth-child(3n) .sk{width:48%}.ll.ph:nth-child(3n+1) .sk{width:86%}@media (prefers-reduced-motion:reduce){.ll.ph .sk{animation:none}}.ln{flex:none;width:3.4em;text-align:right;color:var(--mut);font-size:.72rem;padding-top:2px}
.lrows{flex:1;min-width:0}
.lr{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}
.k-owner{color:#e0a43a}.k-text{color:var(--fg)}.k-tool{color:var(--acc-text)}.k-result,.k-dim,.k-session,.k-note{color:var(--mut)}.k-error{color:var(--bad)}.k-done{color:var(--ok)}.k-raw{color:var(--fg);opacity:.85}
#lvNew{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(4px + env(safe-area-inset-bottom));border-radius:99px;box-shadow:0 2px 8px #0006}
#lvSumBody .lr{margin:2px 0}

#dirLive summary{cursor:pointer;min-height:44px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
#dirState.on{color:var(--ok)}
.dirbar{display:flex;gap:8px;margin:6px 0}
.dirbody{max-height:45vh;min-height:80px;overflow-y:auto;padding:6px;border:1px solid #8884;border-radius:10px;-webkit-overflow-scrolling:touch}
.dr{white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere;font-size:.82rem;margin:1px 0}
.dr.k-text{font-size:1rem;margin:6px 0 2px;font-weight:600}
.dr.k-owner{margin-top:8px}
.dr.k-done{font-weight:600}
button.ghost.on{background:var(--acc);color:#001}
.logitem.pinned{border-left:3px solid var(--acc);padding-left:8px}
.logitem.running .ltitle{color:var(--ok)}

.pills{display:flex;flex-wrap:nowrap;gap:10px;overflow-x:auto;-webkit-overflow-scrolling:touch;scroll-snap-type:x proximity;scroll-behavior:smooth;overscroll-behavior-x:contain;scrollbar-width:none;padding:12px 4px 6px;margin:8px 0 0}
.pills::-webkit-scrollbar{display:none}
.pillbtn{position:relative;flex:none;scroll-snap-align:center;min-height:44px;padding:8px 20px;border-radius:99px;border:1px solid #8886;background:transparent;color:var(--fg);font-size:1rem;white-space:nowrap}
.pillbtn[aria-selected="true"]{background:var(--acc);color:#001;border-color:var(--acc);font-weight:600}
.badge{position:absolute;top:-8px;right:-4px;min-width:22px;height:22px;padding:0 6px;border-radius:99px;background:#b02a27;color:#fff;font-size:.75rem;line-height:22px;text-align:center;box-shadow:0 0 0 2px var(--bg)}
.panel{margin-top:6px}
.pager{display:flex;gap:12px;align-items:center;justify-content:center;margin:10px 0}
.pager button{min-height:44px;min-width:96px}.pager button:disabled{opacity:.4}
.cards{list-style:none;padding:0;margin:0;display:grid;gap:10px}
.card{padding:12px;border:1px solid #8884;border-radius:12px}
.card.active{border-color:var(--acc);box-shadow:inset 3px 0 0 var(--acc)}
.card .cn{font-weight:600;word-break:break-word}
.card .cp{font-family:ui-monospace,Consolas,monospace;font-size:.82rem;word-break:break-all;color:var(--mut);margin-top:2px}
.bar{height:8px;border-radius:99px;background:#8883;overflow:hidden;margin:3px 0 1px}.bar>i{display:block;height:100%;background:var(--ok)}.bar>i.mid{background:#e0a43a}.bar>i.hi{background:var(--bad)}
.win{margin-top:8px;font-size:.9rem}.win .wl{display:flex;justify-content:space-between;gap:8px}

/* full log view: body + "N lines below" button share a wrapper so the button floats over the lines, not over the composer */
.lvwrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}
#lvBody{min-height:0;overflow-x:auto}
#lvRows{width:max-content;min-width:100%}                     /* unwrapped (default): the widest line sets the width, the body scrolls sideways */
#lvRows .lr{white-space:pre;overflow-wrap:normal;word-break:normal}
#lv.wrap #lvRows{width:auto}
#lv.wrap #lvRows .lr{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}
#lvRows .ln{position:sticky;left:0;background:var(--bg);z-index:1}
#lvNew{bottom:4px}
/* composer fixed at the bottom of the screen (the overlay is fixed; bottom safe area comes from #lv padding) */
.lvcomposer{flex:none;margin:0;padding:6px 0 4px;border-top:1px solid #8883;background:var(--bg)}
.lvcomposer textarea{min-height:44px;max-height:132px;line-height:1.35;padding:10px 12px;border-radius:12px;overflow-y:auto}
.lvcomposer button{min-height:44px;padding:0 18px}
.lvmsginfo{flex:none;margin:0 0 2px;font-size:.72rem;min-height:1.1em}

/* skeleton rows while the first answer from the PC is on its way */
.skel{height:64px;margin:0 0 10px;border:0;border-radius:12px;background:linear-gradient(90deg,#8882 25%,#8884 50%,#8882 75%);background-size:200% 100%;animation:skel 1.2s linear infinite}
@keyframes skel{to{background-position:-200% 0}}
@media (prefers-reduced-motion:reduce){.skel{animation:none}}
/* offline / reconnecting banner */
.net{position:sticky;top:0;z-index:20;margin:0 -12px;padding:6px 12px;background:#d9534f;color:#fff;text-align:center;font-size:.85rem;overflow-wrap:anywhere}
/* theme: auto follows the phone; the button forces dark or light */
:root[data-theme=dark]{--bg:#101418;--fg:#e8edf2;--card:#1a2129;--mut:#8b98a5;--acc-text:#4da3ff;--ok:#4cd08a;--bad:#ff6b6b;color-scheme:dark}
:root[data-theme=light]{--bg:#f4f6f8;--fg:#14202b;--card:#fff;--mut:#5b6875;--acc-text:#0b5fd0;--ok:#0a7a3e;--bad:#c62828;color-scheme:light}
header>div{display:flex;gap:8px}
header button.ghost{min-height:44px;min-width:44px}

/* lines that draw nothing take no room; an empty raw row is a thin gap, not a blank line */
.ll.nil{display:none}
.lr:empty{min-height:4px}
/* log view: skeleton overlays for older / newer pages take no room in the list; scroll anchoring is done by hand (iOS Safari) */
#lvBody{overflow-anchor:none}
.lvsk{position:absolute;left:0;right:0;pointer-events:none;z-index:2;background:var(--bg);opacity:.92}.lvsk.top{top:0}.lvsk.bot{bottom:0}
.lvretry{display:flex;gap:10px;align-items:center;padding:14px 10px}
/* boot screen: logo + progress steps, fades out when the session, the item list and the first data are ready */
#boot{position:fixed;inset:0;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;background:var(--bg);transition:opacity .25s}
#boot.out{opacity:0;pointer-events:none}#boot[hidden]{display:none}
#bootSteps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;min-width:200px}
#bootSteps li{display:flex;align-items:center;gap:10px;color:var(--mut)}#bootSteps li i{width:14px;height:14px;border-radius:50%;border:2px solid #8886;box-sizing:border-box}
#bootSteps li.ok{color:inherit}#bootSteps li.ok i{background:#3fb950;border-color:#3fb950}
#bootErr{margin:0;padding:0 20px;max-width:32rem;text-align:center;box-sizing:border-box}
@media (prefers-reduced-motion:reduce){#boot{transition:none}}
.dirbody .dsk{height:1.4em;margin:4px 0}.dirbody .dsk .sk{display:block;height:.8rem;width:80%;border-radius:6px;background:linear-gradient(90deg,#8882 25%,#8885 50%,#8882 75%);background-size:200% 100%;animation:skel 1.2s linear infinite}
.dirbody .dsk:nth-child(2n) .sk{width:55%}
@media (prefers-reduced-motion:reduce){.dirbody .dsk .sk{animation:none}}
.retryrow{list-style:none;padding:12px 0}

/* log toolbar on a phone: one tight wrapping flow (about two rows) with 32px targets and 12px text; desktop keeps the roomy layout above */
@media (max-width:640px){
  .lvbar{display:flex;flex-wrap:wrap;align-items:center;gap:3px 4px;padding:3px 0;font-size:12px}
  .lvbar .lvrow{display:contents}
  .lvbar .lvrow button{padding:0 8px;min-height:44px;font-size:12px;line-height:1}
  .lvbar .lvtitle{flex:1 1 100%;font-size:12px;white-space:normal;overflow-wrap:anywhere;text-overflow:clip}   /* a long name is shown in full */
  .lvbar .lvstate{font-size:12px}
  .lvbar .muted{font-size:11px}
  .lvbar .lvline{width:4.2em;min-height:32px;padding:2px 6px;font-size:16px}   /* 16px: iOS zooms into smaller inputs */
  .lvbar details,.lvbar #lvErr{flex:1 1 100%}
}
.pics{display:flex;gap:8px;flex-wrap:wrap;padding:6px 0 0;flex:none}.pics[hidden]{display:none}.pics .pic{position:relative;width:64px;height:64px;border-radius:10px;overflow:hidden;border:1px solid #8886;background:#8882}.pics .pic img{width:100%;height:100%;object-fit:cover;display:block}.pics .pic button{position:absolute;top:0;right:0;min-height:28px;min-width:28px;padding:0;border-radius:0 0 0 10px;line-height:1;font-size:16px}.pics .pic.bad{outline:2px solid #d9534f}.picbtn{min-width:44px;padding:0 10px!important;font-size:20px}
.pics .pic.fchip{width:auto;min-width:120px;max-width:210px;height:auto;min-height:64px;padding:6px 30px 6px 8px;display:flex;flex-direction:column;gap:2px;font-size:.8rem;box-sizing:border-box}
.fchip .ficon{font-size:1.3em;line-height:1}.fchip .fname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600}.fchip .fsub,.fchip .fprev{opacity:.75;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fchip .fbar{display:block;height:4px;border-radius:2px;background:#8883;overflow:hidden}.fchip .fbar b{display:block;height:100%;background:#4a90d9;transition:width .2s}
.filechip{display:inline-block;padding:4px 10px;border-radius:8px;border:1px solid #8886;background:#8882;font-size:.85em}

/* pictures in the chat history: fixed box so the lines do not jump when the preview loads */
.chatpic{display:inline-block;height:96px;width:96px;object-fit:cover;border-radius:8px;vertical-align:middle;margin:2px 0;background:#8883}
.chatpic.none{height:auto;width:auto;background:none;font-size:1.4em}
.cmpics{padding:6px 12px 0}
.pic .nopv{display:grid;place-items:center;width:100%;height:100%;font-size:1.6em}
/* Chat modal (Messenger style) */
#chatOpen{position:relative}
body.cmopen{overflow:hidden;overscroll-behavior:none;position:fixed;left:0;right:0;width:100%}   /* the page behind cannot scroll (iOS ignores overflow:hidden alone); chat.js keeps and restores the scroll position */
body.cmopen #dash,body.cmopen #login,body.cmopen #net{visibility:hidden}   /* nothing of the page can show through */
#cmBack{position:fixed;inset:0;z-index:50;background:var(--bg)}   /* solid layer under the modal: never animated, so no frame shows the page */
#cm{position:fixed;left:0;right:0;top:var(--cmt,0px);height:var(--cmh,100dvh);z-index:51;display:flex;flex-direction:column;background:var(--bg);color:var(--fg);padding:env(safe-area-inset-top) max(8px,env(safe-area-inset-right)) env(safe-area-inset-bottom) max(8px,env(safe-area-inset-left));overscroll-behavior:contain;transform:translateY(24px);transition:transform .2s ease}
#cm.show{transform:none}
.cmbar{flex:none;display:flex;align-items:center;gap:10px;padding:6px 0;border-bottom:1px solid #8883}
.cmbar b{font-size:1.05rem}.cmbar .muted{margin-left:auto;font-size:.75rem}
.cmbar button.ghost{min-width:44px;min-height:44px;font-size:1.2rem}
.cmpinbar[hidden]{display:none}
.cmpinbar{flex:none;display:flex;align-items:center;gap:6px;padding:4px 0;border-bottom:1px solid #8883;font-size:.82rem}
.cmpingo{flex:1;min-width:0;min-height:40px;text-align:left;background:transparent;color:var(--fg);border:0;padding:4px 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmpinn{min-width:44px;min-height:40px;background:transparent;color:var(--acc);border:1px solid var(--acc);border-radius:99px}
.cmpanel{position:absolute;inset:0;z-index:5;overflow-y:auto;background:var(--bg);padding:6px 2px}
.cmpanel .cmpinrow{display:flex;align-items:center;gap:6px;border-bottom:1px solid #8883}
.cmpanel .cmpinrow button.go{flex:1;min-width:0;min-height:48px;text-align:left;background:transparent;color:var(--fg);border:0;overflow-wrap:anywhere}
.cmpanel .cmpinrow button.un{min-width:48px;min-height:48px;background:transparent;color:var(--bad);border:0}
.cmact{margin-top:4px;display:flex;gap:6px}.cmact button{min-height:40px;padding:4px 12px;border-radius:99px;border:1px solid #8886;background:var(--card);color:var(--fg)}
.cmb.pinned{box-shadow:0 0 0 2px var(--acc)}
.cmb.cmflash{animation:cmflash 1.4s ease-out}@keyframes cmflash{0%,40%{outline:3px solid var(--acc);outline-offset:2px}100%{outline:3px solid transparent;outline-offset:2px}}
@media (prefers-reduced-motion:reduce){.cmb.cmflash{animation:none;outline:3px solid var(--acc)}}
.cmwrap{position:relative;flex:1;min-height:0;display:flex;flex-direction:column}
.cmlist{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:10px 2px;display:flex;flex-direction:column;gap:6px}
.cmday{align-self:center;margin:8px 0 2px}.cmday span{font-size:.72rem;color:var(--mut);background:var(--card);padding:2px 10px;border-radius:99px}
.cmempty{align-self:center;text-align:center;margin:auto}
.cmb{flex-shrink:0;max-width:82%;padding:7px 10px 4px;border-radius:16px;line-height:1.35;overflow-wrap:anywhere}
.cmb.me{align-self:flex-end;background:var(--acc);color:#001;border-bottom-right-radius:4px}
.cmb.dir{align-self:flex-start;background:var(--card);border-bottom-left-radius:4px;box-shadow:0 0 0 1px #8883}
.cmt{white-space:pre-wrap}
.cmm{display:flex;justify-content:flex-end;gap:5px;font-size:.68rem;opacity:.75;margin-top:2px}
.cmk.rd{color:#0b5fd0;font-weight:700}.cmb.me .cmk.rd{color:#003a8c}
.cmst{align-self:center;max-width:90%;overflow-wrap:anywhere;text-align:center;font-size:.78rem;color:var(--mut)}
.cmb .chatpic{display:block}
.cmb.in{animation:cmin .18s ease-out backwards}
@keyframes cmin{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
#cm .lvcomposer{padding-bottom:4px}
.cmjump{position:absolute;right:10px;bottom:10px;min-width:44px;min-height:44px;border-radius:99px;border:1px solid #8885;background:var(--card);color:var(--acc);font-size:1.2rem;box-shadow:0 2px 8px #0004}.cmjump b{margin-left:4px;font-size:.8rem;color:var(--bad)}
.cmmore{align-self:center;background:transparent;color:var(--acc);border:1px solid var(--acc);border-radius:99px;min-height:36px;padding:0 14px;font-size:.8rem}
.cmb pre{margin:4px 0;padding:8px 10px;background:#0002;border-radius:8px;overflow-x:auto;font:.78rem/1.4 ui-monospace,Menlo,Consolas,monospace;white-space:pre}
.cmb ul,.cmb ol{margin:4px 0;padding-left:1.3em}.cmb ul{list-style:disc}.cmb ol{list-style:decimal}.cmb li{padding:1px 0;border:0}
.cmsec{margin:6px 0;padding:5px 8px;border-left:3px solid var(--mut);background:#8881;border-radius:6px}
.cmsec.done{border-color:var(--ok)}.cmsec.evidence{border-color:var(--acc)}.cmsec.next{border-color:#e0a030}.cmsec.blocked{border-color:var(--bad)}
.cmlab{display:block;font-size:.66rem;letter-spacing:.06em;color:var(--mut)}
.cmneeds{margin:8px 0 2px;padding:7px 10px;border-radius:8px;background:#ff6b6b22;border:1px solid var(--bad)}.cmneeds .cmlab{color:var(--bad);font-weight:700}
.cmb.needs{box-shadow:0 0 0 2px var(--bad)}
.cmb .chatpic{cursor:zoom-in}
.cmzoom{position:fixed;inset:0;z-index:60;display:grid;place-items:center;background:#000c;opacity:0;transition:opacity .18s ease}.cmzoom.show{opacity:1}
.cmzoom img{width:min(96vw,640px);max-height:86dvh;object-fit:contain;border-radius:8px}
.cmzoom button{position:absolute;top:calc(env(safe-area-inset-top) + 8px);right:10px;min-width:44px;min-height:44px;border-radius:99px;border:1px solid #fff6;background:#0008;color:#fff;font-size:1.4rem}
@media (prefers-reduced-motion:reduce){.cmzoom{transition:none}}
@media (prefers-reduced-motion:reduce){#cm{transition:none;transform:none}.cmb.in{animation:none}}
.cmnew{display:flex;align-items:center;gap:8px;margin:10px 0 2px;color:var(--bad);font-size:.72rem;font-weight:600}.cmnew::before,.cmnew::after{content:"";flex:1;height:1px;background:var(--bad);opacity:.5}
.cmtyping{display:flex;gap:4px;padding:10px 12px;width:fit-content}.cmtyping i{width:7px;height:7px;border-radius:50%;background:var(--mut);animation:cmdot 1.2s ease-in-out infinite}.cmtyping i:nth-child(2){animation-delay:.2s}.cmtyping i:nth-child(3){animation-delay:.4s}
@keyframes cmdot{0%,60%,100%{opacity:.3;transform:none}30%{opacity:1;transform:translateY(-3px)}}
@media (prefers-reduced-motion:reduce){.cmtyping i{animation:none;opacity:.6}}

/* #N / @project links and the read-only info card (refs.js) */
.cmref{display:inline;margin:-2px -1px;padding:2px 3px;min-height:0;border:0;border-bottom:1px dashed var(--acc);border-radius:2px;background:transparent;color:var(--acc);font:inherit;font-weight:600;touch-action:manipulation;cursor:pointer}
.cmcard[hidden]{display:none}
.cmcard{position:absolute;inset:0;z-index:8;display:flex;flex-direction:column;justify-content:flex-end}
.cmcardbk{position:absolute;inset:0;background:#0006}
.cmcardbox{position:relative;max-height:78%;overflow-y:auto;background:var(--bg);border-top:1px solid #8886;border-radius:16px 16px 0 0;padding:12px 16px calc(14px + env(safe-area-inset-bottom));box-shadow:0 -8px 24px #0004}
.cmcardh{display:flex;align-items:baseline;gap:8px;margin-bottom:8px}
.cmcardh b{font-size:1.05rem}.cmcardh .cmcardx{margin-left:auto;min-width:48px;min-height:48px;font-size:1.4rem;align-self:center}
.cmrow{display:flex;justify-content:space-between;gap:12px;padding:5px 0;border-bottom:1px solid #8882;font-size:.9rem}
.cmprog{padding:8px 0}.cmprogt{display:flex;justify-content:space-between;font-size:.9rem}.cmeta{font-size:.82rem}
.cmrh{margin-top:8px;font-size:.8rem}.cmrep{white-space:pre-wrap;overflow-wrap:anywhere;font-size:.88rem;padding:4px 0}.cmasof{margin-top:8px;font-size:.78rem}
.cmcardgo{display:block;width:100%;min-height:48px;margin-top:10px}
.cmprow{display:block;width:100%;min-height:48px;text-align:left;margin:4px 0;background:transparent;color:var(--fg);border:1px solid #8884;border-radius:10px;padding:8px 10px}
.cmprowt{display:flex;justify-content:space-between;gap:8px}

/* status panel (panel.js): a read-only sheet over the Chat, tabs on top */
#sp[hidden]{display:none}
#sp{position:absolute;inset:0;z-index:7;display:flex;flex-direction:column;background:var(--bg);padding:env(safe-area-inset-top) max(8px,env(safe-area-inset-right)) 0 max(8px,env(safe-area-inset-left))}
.sphead{flex:none;display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid #8883}.sphead b{font-size:1.05rem}.sphead button{margin-left:auto;min-width:48px;min-height:48px;font-size:1.4rem}
.sptabs{flex:none;display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;padding:6px 0;scrollbar-width:none;-webkit-overflow-scrolling:touch}.sptabs::-webkit-scrollbar{display:none}
.sptab{flex:none;white-space:nowrap;min-height:44px;padding:0 14px;border:1px solid #8884;border-radius:22px;background:transparent;color:var(--fg);font:inherit;font-size:.9rem;touch-action:manipulation}
.sptab[aria-selected=true]{background:var(--acc);color:#fff;border-color:var(--acc);font-weight:600}
.spbody{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:4px 2px calc(16px + env(safe-area-inset-bottom));padding-left:max(2px,env(safe-area-inset-left));padding-right:max(2px,env(safe-area-inset-right))}
.sph{margin:14px 0 6px;font-size:.95rem}.spline{padding:6px 0}.spdoing{margin-top:4px;font-size:.88rem;overflow-wrap:anywhere}
.sprow,.spacc,.spsec{padding:8px 0;border-bottom:1px solid #8882}.sprowt{font-size:.95rem}.spname{font-weight:600;margin-bottom:4px}.spp{margin:4px 0;font-size:.9rem;overflow-wrap:anywhere}
.cmdoing{align-self:center;margin-left:6px;max-width:68vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.78rem;color:var(--mut)}

/* M5: @ picker, quick-reply chips, search, reactions, tags on a message, Needs-owner badge */
.badge.needb{right:auto;left:-4px;background:#c98a00}#cm .cmbar b.badge{font-size:.72rem;right:-2px;left:auto}
#spOpen{position:relative}
.cmtagpick[hidden],.cmchips[hidden],.cmsearch[hidden]{display:none}
.cmtagpick{flex:none;max-height:36vh;overflow-y:auto;overscroll-behavior:contain;border:1px solid #8884;border-radius:12px;background:var(--card);margin:4px 0}
.cmtaph{padding:6px 12px;font-size:.78rem;opacity:.7}.cmtapn{padding:8px 12px}
.cmtapo{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 10px;width:100%;min-height:44px;padding:6px 12px;border:0;border-top:1px solid #8882;background:transparent;color:var(--fg);font:inherit;text-align:left;touch-action:manipulation}
.cmtapo b{color:var(--acc)}.cmtapo .muted{font-size:.82rem;flex:1 1 9rem;min-width:0;overflow-wrap:anywhere}
.cmchips{flex:none;display:flex;gap:8px;padding:6px 0 2px;overflow-x:auto;scrollbar-width:none}.cmchips::-webkit-scrollbar{display:none}
.cmchip{flex:none;min-height:44px;padding:0 18px;border-radius:22px;border:1px solid #8886;background:var(--card);color:var(--fg);font:inherit;touch-action:manipulation}
.cmsearch{flex:none;display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid #8883}
.cmsearch input{flex:1;min-width:0;min-height:44px;padding:0 12px;border-radius:12px;font-size:16px}
.cmsearch .muted{font-size:.78rem;white-space:nowrap}.cmsearch button{min-width:44px;min-height:44px;font-size:1.3rem}
.cmtags{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
.cmtag{padding:1px 8px;border-radius:99px;font-size:.72rem;font-weight:600;background:#0003}
.cmb.me .cmtag{background:#0002}
.cmreact{display:inline-block;margin-top:4px;padding:0 6px;border-radius:99px;font-size:.95rem;background:#8883}
.cmact{flex-wrap:wrap}.cmact .cmrbtn{min-width:44px;padding:4px 8px;font-size:1.05rem}.cmact .cmrbtn.on{background:var(--acc);border-color:var(--acc)}

/* M6: Plans tab (Year | Projects switch, cards that expand) and reply-to-message */
.spswitch{display:flex;gap:8px;margin:4px 0 8px}.spsw{flex:1;min-height:44px;border:1px solid #8886;border-radius:22px;background:transparent;color:var(--fg);font:inherit;touch-action:manipulation}
.spsw[aria-pressed=true]{background:var(--acc);color:#fff;border-color:var(--acc);font-weight:600}
.spall{padding:6px 0 10px;border-bottom:1px solid #8882}
.spcard{border-bottom:1px solid #8882}.spcardh{display:block;width:100%;min-height:44px;padding:10px 0;border:0;background:transparent;color:var(--fg);font:inherit;text-align:left;touch-action:manipulation}
.spcname{overflow-wrap:anywhere;padding-right:8px}.spnext{margin-top:4px;overflow-wrap:anywhere}
.spcardh::after{content:'▾';float:right;opacity:.6}.spcardh[aria-expanded=true]::after{content:'▴'}
.spitems{list-style:none;margin:0;padding:0 0 8px}.spitem{display:flex;flex-wrap:wrap;gap:2px 8px;align-items:baseline;padding:6px 0;font-size:.9rem;overflow-wrap:anywhere}
.spitem.isdone .sptext{opacity:.6;text-decoration:line-through}.spchk{flex:none;width:1.2em}.sptext{flex:1 1 60%;min-width:0}
.spwait{flex:none;padding:0 8px;border-radius:99px;font-size:.72rem;background:#c98a00;color:#fff}.spest{flex:none}
.spdir{padding:4px 0 8px;border-top:1px dashed #8883}
.bar i.done{background:#2e9e5b}
.pc{padding:9px 0;border-bottom:1px solid #8882}.pctop{display:flex;justify-content:space-between;align-items:baseline;gap:8px;flex-wrap:wrap}.pcname{overflow-wrap:anywhere}
.pcst{margin:3px 0;font-size:.9rem}.pcst.working{color:var(--ok)}.pcst.waiting{color:#b87400;font-weight:600}
.pcbar{display:flex;gap:2px;height:9px;margin:4px 0 2px}.pcbar i{flex:1 1 0;min-width:2px;border-radius:3px;background:#8884}.pcbar i.d{background:#2e9e5b}.pcbar i.o{background:#e0a43a}
.cmreply[hidden]{display:none}
.cmreply{flex:none;display:flex;align-items:center;gap:6px;margin:4px 0;padding:4px 4px 4px 10px;border-left:3px solid var(--acc);border-radius:8px;background:var(--card)}
.cmrq{flex:1;min-width:0;display:flex;flex-direction:column;font-size:.85rem}.cmrq b{color:var(--acc);font-size:.78rem}.cmrq span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;opacity:.85}
.cmreply button{min-width:44px;min-height:44px;font-size:1.3rem}
.cmquote{display:flex;flex-direction:column;width:100%;min-height:44px;margin:0 0 6px;padding:4px 8px;border:0;border-left:3px solid var(--acc);border-radius:6px;background:#0002;color:inherit;font:inherit;font-size:.82rem;text-align:left;touch-action:manipulation}
.cmquote b{font-size:.74rem;opacity:.9}.cmquote span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere;opacity:.85}
.cmact .cmrply{font-weight:600}
.cmpinrp,.cmpanel .cmpinrow button.rp{min-width:44px;min-height:44px;background:transparent;color:var(--acc);border:0;font-size:1.2rem}

.cmb.cmclamp{max-height:22em;overflow:hidden;position:relative;flex-shrink:0}
.cmb.cmclamp .cmmore{position:absolute;left:0;right:0;bottom:0;background:linear-gradient(transparent,var(--card,#1c2129) 55%)}
.cmmore{display:block;min-height:44px;min-width:44px;width:100%;border:0;background:none;color:inherit;font:inherit;font-weight:600;text-align:center;cursor:pointer}
.cmb.dir{cursor:pointer;-webkit-tap-highlight-color:transparent}
.cmb code.cmic{padding:1px 5px;background:#0002;border-radius:5px;font:.85em ui-monospace,Menlo,Consolas,monospace}.cmb a{color:inherit;text-decoration:underline;word-break:break-all}.cmb b.cmh{display:block;margin-top:4px}
.cmb .cmtbl{overflow-x:auto;margin:4px 0}.cmb table{border-collapse:collapse;font-size:.85em}.cmb th,.cmb td{border:1px solid #fff3;padding:3px 7px;min-width:4em;text-align:left}.cmb th{background:#0002}
#evoBox{background:none;padding:0}.evotop{display:flex;flex-wrap:nowrap;gap:8px;margin:0 0 8px;overflow-x:auto;scrollbar-width:none}.evotop::-webkit-scrollbar{display:none}.evotop>*{flex:0 0 auto;white-space:nowrap}.evotab.on{background:var(--acc);color:#001}
.evocard{background:var(--card);border-radius:12px;padding:12px;margin:0 0 12px}.evocard h3{margin:0 0 8px;font-size:.95rem}
.evorow{display:flex;justify-content:space-between;gap:10px;padding:2px 0}.evorow b{text-align:right}.evorow>span{flex:0 0 40%}
.evorow.long{flex-direction:column;gap:2px}.evorow.long b{text-align:left;font-weight:400;line-height:1.35}
.evost.running{color:var(--ok)}.evost.error{color:var(--bad)}.evost.paused,.evost.stopped{color:#e0a43a}
.evosvg{width:100%;height:auto;display:block}.evotx{fill:var(--mut);font-size:11px}.evogrid{stroke:#8883;stroke-width:1}.evocap{stroke:var(--bad);stroke-width:1.2;stroke-dasharray:4 3}
.evoln{stroke-width:2;stroke-linejoin:round}.evoln.a,.evodot.a,.evobar .u,.evobar .al{stroke:#4da3ff;background:#4da3ff}.evoln.b,.evodot.b{stroke:#e0a43a;background:#e0a43a}.evoln.c,.evodot.c{stroke:#4cd08a;background:#4cd08a}
.evoln{fill:none}.evobar{display:flex;height:12px;border-radius:99px;overflow:hidden;background:#8883;margin:4px 0 6px}.evobar i{display:block;height:100%}.evobar .f{background:#8883}.evobar .tr,.evodot.tr{background:#4cd08a}.evobar .re,.evodot.re{background:#8b98a5}.evodot.al{background:#4da3ff}
.evoleg{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:.8rem;color:var(--mut);margin-top:4px}.evodot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px}
.evolv{display:flex;align-items:center;gap:8px;padding:3px 0}.evoname{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.evoseg{display:flex;gap:3px}.evoseg i{width:16px;height:10px;border-radius:3px;background:#8883}.evoseg i.on{background:var(--ok)}
.evodemo{background:#e0a43a;color:#001;border-radius:8px;padding:6px 10px;font-weight:700;margin:0 0 8px}
.evoreport{white-space:pre-wrap;word-break:break-word;background:var(--card);border-radius:12px;padding:12px;font:.85rem/1.5 ui-monospace,Menlo,Consolas,monospace}
.spevo .sprow{display:block}

.cmb .chatpic.big{display:block;height:auto;width:auto;max-width:100%;max-height:300px;object-fit:contain;cursor:zoom-in;margin:6px 0}
.cnrow{border-top:1px solid #8883;padding:8px 0;overflow-wrap:anywhere}.cnbtns{display:flex;gap:8px;margin-top:6px}.cnbtns .on{background:var(--acc);color:#001}.cnback{color:var(--bad);font-weight:600}.cnboth{display:flex;align-items:center;gap:8px;min-height:44px;margin:6px 0}.cnboth input{width:22px;height:22px;flex:none}.cnnote{font-size:.8rem}

.evfil{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;-webkit-overflow-scrolling:touch;margin:8px 0;padding-bottom:4px;scrollbar-width:none}.evfil::-webkit-scrollbar{display:none}.evfil .evtab{flex:0 0 auto;white-space:nowrap}
.evby{display:flex;align-items:center;gap:6px;margin:0 0 6px}.evby .evtab{min-height:44px;padding:2px 12px}button.ghost.evtab{min-height:44px}.evgh{margin:14px 0 2px;font-size:.9rem;color:var(--mut)}
.evdoc{grid-column:1/-1}.evdocbtn{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;text-align:left;padding:10px;min-height:44px;border:1px solid #8884;border-radius:8px;background:transparent;color:var(--fg);text-decoration:none;font:inherit;box-sizing:border-box}.evdocico{font-size:1.4rem}.evdocname{font-weight:600;overflow-wrap:anywhere}.evlink{display:inline-block;margin-top:4px;color:var(--acc-text);min-height:44px;line-height:44px;text-decoration:underline}
.evtv{position:fixed;inset:0;z-index:1000;background:#000b;display:flex;align-items:flex-end;justify-content:center}.evtvpanel{background:var(--card,#fff);color:var(--fg);width:100%;max-width:720px;max-height:92vh;border-radius:14px 14px 0 0;display:flex;flex-direction:column}.evtvhead{display:flex;align-items:center;gap:10px;padding:10px 12px;border-bottom:1px solid #8884}.evtvname{flex:1;min-width:0;overflow-wrap:anywhere}.evtvx{flex:none;min-width:44px;min-height:44px}.evtvbody{overflow:auto;padding:12px;-webkit-overflow-scrolling:touch}.evtxt{white-space:pre-wrap;overflow-wrap:anywhere;font:.85rem/1.45 ui-monospace,Consolas,monospace;margin:6px 0}.evmdq{margin:6px 0;padding-left:10px;border-left:3px solid #8886}.evmdl{padding-left:22px;list-style:disc}ol.evmdl{list-style:decimal}.evmdl li{border:0;padding:2px 0;display:list-item}.evmdh{margin:10px 0 4px}
@media (min-width:700px){.evtv{align-items:center}.evtvpanel{border-radius:14px;max-width:820px}}
.evwarn{color:#e0a030;font-size:.85rem;margin-top:2px}.evrow{display:flex;gap:8px;align-items:flex-start;padding:8px;border:1px solid #8884;border-radius:8px;grid-column:1/-1}.evico{flex:none;font-size:1.1rem}.evcap{color:var(--fg);font-size:.85rem;overflow-wrap:anywhere}
.evgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px;margin:8px 0}.evtile{margin:0}.evmedia{display:block;width:100%;height:110px;object-fit:cover;border-radius:8px;background:#8883}video.evmedia{height:auto;max-height:160px;object-fit:contain}.evtile figcaption{font-size:.75rem;overflow-wrap:anywhere;margin-top:2px}.chatvid{display:block;max-width:100%;max-height:300px;margin:6px 0;border-radius:8px}
.evosubs{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;-webkit-overflow-scrolling:touch;margin:0 0 10px;padding-bottom:4px;scrollbar-width:none}.evosubs::-webkit-scrollbar{display:none}.evosubs .evotab{flex:0 0 auto;white-space:nowrap}
.evob.a{fill:#4da3ff}.evob.b{fill:#e0a43a}.evob.c{fill:#4cd08a}
.verfil{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;scrollbar-width:none;margin:6px 0}.verfil::-webkit-scrollbar{display:none}.verfil .evtab{flex:none;white-space:nowrap}.evbadge{display:inline-block;padding:1px 8px;border-radius:999px;font-size:.78rem;font-weight:700;line-height:1.5;border:1px solid transparent}.evbadge.keep{background:#1f8a4c22;color:#1f8a4c;border-color:#1f8a4c}.evbadge.shrink{background:#c7820022;color:#a86a00;border-color:#c78200}.evbadge.stop{background:#c0392b22;color:#c0392b;border-color:#c0392b}.evreason{margin:4px 0;font-size:.92rem}.projgrp{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;scrollbar-width:none;margin:6px 0}.projgrp::-webkit-scrollbar{display:none}.projgrp .evtab{flex:none;white-space:nowrap}.projtags{display:flex;flex-wrap:nowrap;gap:6px;overflow-x:auto;scrollbar-width:none;margin:6px 0}.projtags::-webkit-scrollbar{display:none}.projtags .evtab{flex:none;white-space:nowrap}.tagrow{display:flex;flex-wrap:wrap;gap:4px;margin-top:2px}.tagpill{display:inline-block;padding:0 7px;border-radius:999px;font-size:.72rem;line-height:1.6;border:1px solid #8886;color:var(--mut)}.projbtn.on .tagpill{color:#001;border-color:#0016}
.projgh{margin:8px 0 0;font-size:.85rem;color:var(--mut)}.projlist{display:flex;flex-direction:column;gap:6px;margin:6px 0}.projbtn{display:flex;flex-direction:column;align-items:flex-start;text-align:left;gap:2px;min-height:44px}.projbtn.on{background:var(--acc);color:#001}.projbtn.on .muted{color:#001}
.promap{width:100%;height:auto;max-height:70vh;display:block;touch-action:none;user-select:none;-webkit-user-select:none;background:#8881;border-radius:10px}.pnode circle{fill:#4da3ff55;stroke:#4da3ff;stroke-width:2}.pnode.on circle{fill:#4da3ff;stroke:var(--fg)}.pnode{cursor:pointer}.protx{fill:var(--fg);font-size:12px;pointer-events:none}.proedge{stroke:var(--mut);stroke-width:1.6}.proedge.dash{stroke-dasharray:5 4}.proarrowhead{fill:var(--mut)}
.mapbtns{display:flex;gap:6px;margin:6px 0}.mapbtn{min-width:44px;min-height:44px;font-size:1.2rem}.prodetail{margin-top:8px}
.projh{margin:12px 0 4px;font-size:.88rem}.projrole,.projtask{margin:2px 0;font-size:.85rem;line-height:1.35;overflow-wrap:anywhere}
.evopen{display:block;position:relative;width:100%;padding:0;border:0;background:none;cursor:zoom-in;border-radius:8px}.evopen:focus-visible{outline:2px solid var(--acc)}.evplay{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-size:1.6rem;color:#fff;background:#0008;border-radius:50%;width:44px;height:44px;line-height:44px;text-align:center;pointer-events:none}
.evlb-open{overflow:hidden}.evlb{position:fixed;inset:0;z-index:1000;background:#000d;display:flex;align-items:center;justify-content:center;flex-direction:column;padding:56px 56px 64px}
.evlbstage{flex:1;min-height:0;width:100%;display:flex;align-items:center;justify-content:center;touch-action:none;overflow:hidden}.evlbstage.zoomed .evlbmedia{cursor:grab}.evlbmedia{transform-origin:center;user-select:none;-webkit-user-select:none}.evlbmedia{max-width:100%;max-height:100%;object-fit:contain;border-radius:6px}
.evlbbtn{position:absolute;min-width:44px;min-height:44px;border:0;border-radius:99px;background:#fff2;color:#fff;font-size:1.5rem;line-height:1;cursor:pointer}.evlbbtn:focus-visible{outline:2px solid var(--acc)}
.evlbclose{top:8px;right:8px}.evlbprev{left:6px;top:50%;transform:translateY(-50%)}.evlbnext{right:6px;top:50%;transform:translateY(-50%)}.evlb.single .evlbprev,.evlb.single .evlbnext{display:none}
.evlbcap{position:absolute;left:12px;right:12px;bottom:34px;text-align:center;color:#fff;font-size:.85rem;overflow-wrap:anywhere}.evlbpos{position:absolute;left:0;right:0;bottom:10px;text-align:center;color:#ccd;font-size:.8rem}
.evlbzoom{position:absolute;top:8px;left:8px;display:flex;align-items:center;gap:6px;color:#fff}.evlbzoom[hidden]{display:none}.evlbzoom .evlbbtn{position:static}.evlbpct{min-width:3.2em;text-align:center;font-size:.85rem}
.pgnav{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:8px 0}.pgrange{margin-right:auto}.pgbtn{min-width:44px;min-height:44px}.pgbtn.on{background:var(--acc);color:#001}.pgbtn:disabled{opacity:.4}
.pm-open{overflow:hidden}.pmodal{position:fixed;inset:0;z-index:900;background:#000b;display:flex;align-items:center;justify-content:center;padding:10px}.pmpanel{background:var(--bg);color:var(--fg);border-radius:14px;width:min(900px,100%);max-height:100%;display:flex;flex-direction:column;padding:12px;box-sizing:border-box}
.pmhead{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}.pmhead h3{margin:0;overflow-wrap:anywhere}.pmclose{min-width:44px;min-height:44px;font-size:1.2rem}.pmbody{overflow:auto;-webkit-overflow-scrolling:touch;flex:1;min-height:0}.pmodal .promap{max-height:calc(100vh - 300px);min-height:220px}
.pmodal .promap{max-height:calc(100vh - 300px);max-height:calc(100dvh - 300px)}.pmbody{overscroll-behavior:contain}
@media (max-width:640px){.pmodal{padding:max(6px,env(safe-area-inset-top)) max(6px,env(safe-area-inset-right)) max(6px,env(safe-area-inset-bottom)) max(6px,env(safe-area-inset-left))}.pmpanel{padding:8px;border-radius:10px}.pmodal .promap{min-height:200px}.evlb{padding:52px 6px 60px}.pgnav{justify-content:center}.pgrange{flex:1 1 100%;margin:0;text-align:center}}
.needh{margin:12px 0 2px;text-transform:none}.needh b{color:var(--fg)}
.projother{width:100%;box-sizing:border-box;margin-top:8px}.pmbody .projtask{margin:0;padding:7px 0;border-top:1px solid #8882;overflow-wrap:anywhere}.pmbody .projtask:first-of-type{border-top:0}.pcount{margin:8px 0 0}.pmclose:focus-visible{outline:2px solid var(--acc);outline-offset:1px}
.weekBox { margin: 8px 0; padding: 8px 10px; background: var(--card); border: 1px solid #8b98a533; border-radius: 8px; }.weekHead { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; font-size: .8125rem; }.weekHead .muted { font-size: .75rem; }.weekBars { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; align-items: end; height: 56px; margin-top: 8px; }.weekCol { display: flex; flex-direction: column; justify-content: flex-end; height: 100%; min-width: 0; }.weekBar { width: 100%; min-height: 2px; border-radius: 3px 3px 0 0; background: var(--acc); opacity: .55; }.weekBar.best { opacity: 1; }.weekBar.today { outline: 1px solid var(--acc); outline-offset: 1px; }.weekBar.zero { background: var(--mut); opacity: .6; }.weekLabels { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; margin-top: 4px; text-align: center; font-size: .75rem; color: var(--mut); }.weekDay.today { font-weight: 700; color: inherit; }
.todayBox{border:1px solid #8886;border-radius:12px;padding:10px 12px;margin:8px 0;display:flex;flex-direction:column;gap:4px}.todayRow{display:flex;align-items:baseline;gap:8px}.todayN{font-size:1.4rem;font-weight:700;min-width:1.6em}.todayN.warn{color:#ff6b6b}@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .todayN.warn{color:#c0392b}}:root[data-theme=light] .todayN.warn{color:#c0392b}.todayItem{padding-left:2.2em;overflow-wrap:anywhere}
.sinceBox{border:1px solid var(--acc);border-radius:12px;padding:10px 12px;margin:8px 0;display:flex;flex-direction:column;gap:4px}.sinceBtn{align-self:flex-start;min-height:44px;margin-top:4px}
.answerBtn{align-self:flex-start;min-height:44px;margin-top:4px}
.healthLine{margin:6px 0;padding:6px 10px;border-radius:10px;border:1px solid #8884;font-size:.88rem;overflow-wrap:anywhere}.healthLine::before{content:'';display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:8px;background:var(--mut)}.h-ok::before{background:var(--ok)}.h-warn::before{background:#d9a300}.h-bad::before{background:var(--bad)}.h-bad{border-color:var(--bad)}
.needTag{display:inline-block;align-self:flex-start;margin:2px 6px 2px 0;padding:2px 8px;border-radius:999px;border:1px solid #8886;font-size:.78rem}.needTag-stale{border-color:#d9a300}
.pmodal .evosubs{flex:none}
.srchBox{width:100%;box-sizing:border-box;min-height:44px;padding:0 12px;margin:2px 0 8px;border:1px solid #8884;border-radius:10px;background:transparent;color:var(--fg);font:inherit;font-size:1rem}
.srchHit{padding:6px 0;border-bottom:1px solid #8882}.srchHit mark{background:#f5c54266;color:inherit;border-radius:3px;padding:0 1px}
.verbtn{display:block;width:100%;text-align:left;margin:6px 0;padding:10px 12px;min-height:44px;height:auto}
.verhead{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline}.versum{margin:4px 0}.verchg{margin:2px 0;font-size:.92rem}
.verbar{display:flex;flex-wrap:wrap;gap:6px 12px;align-items:center;justify-content:space-between;margin-bottom:8px;padding:6px 10px;border-radius:10px;background:#8882}.verback{min-height:44px}
.verbtn{color:var(--fg)}.verbtn b{color:var(--acc)}
button.ghost.verbtn{color:var(--fg)}button.ghost.verbtn b{color:var(--acc-text)}button.ghost.verbtn .muted{color:var(--mut)}

.pmodal .evosubs.more{-webkit-mask-image:linear-gradient(90deg,#000 88%,transparent);mask-image:linear-gradient(90deg,#000 88%,transparent)}
.tagpill{font-size:.78rem}
@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .lvstate.pause,:root:not([data-theme=dark]) .k-owner{color:#8a5a00}}
:root[data-theme=light] .lvstate.pause,:root[data-theme=light] .k-owner{color:#8a5a00}
.retryrow button{min-height:44px;min-width:96px}
@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .bar>i.mid{background:#b87800}}
:root[data-theme=light] .bar>i.mid{background:#b87800}
.evosubs .evotab{min-height:44px}
.versum{overflow-wrap:anywhere}.verchg{overflow-wrap:anywhere}.verhead{overflow-wrap:anywhere}.verbtn{overflow-wrap:anywhere}
.evorow.long b{overflow-wrap:anywhere}
.pnode:focus-visible circle{stroke-width:3}
html[data-size=big] .evotx{font-size:12px}html[data-size=huge] .evotx{font-size:14px}
@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .evost.paused,:root:not([data-theme=dark]) .evost.stopped{color:#8a5a00}}
:root[data-theme=light] .evost.paused,:root[data-theme=light] .evost.stopped{color:#8a5a00}
.cmerr { margin-top: 6px; padding-top: 6px; border-top: 1px dashed #8b98a566; font-size: 12px; white-space: pre-wrap; overflow-wrap: anywhere; font-family: ui-monospace, Consolas, monospace; min-height: 2.6em; max-height: 9em; overflow-y: auto; border-left: 3px solid #e5534b; padding-left: 8px; }
.cmrs{flex:none;margin:6px 0;padding:10px;border:1px solid #e5534b88;border-radius:10px;background:var(--card);display:flex;flex-wrap:wrap;gap:8px;align-items:center}.cmrs p{margin:0;flex:1 1 100%;font-size:.9rem}.cmrs button{min-height:44px;min-width:44px}.cmrsgo{background:#e5534b;color:#fff;border:0;border-radius:8px;padding:0 14px}.cmrsgo:disabled,.cmrs button:disabled{opacity:.5}
/* chart series differ by more than colour: solid / dashed / dotted lines, round / square / diamond legend marks; day headers keep the look of a small line */
.evoln.b{stroke-dasharray:6 3}.evoln.c{stroke-dasharray:1 3;stroke-linecap:round}.evodot.b{border-radius:0}.evodot.c{border-radius:2px;transform:rotate(45deg)}
h4.needh{margin:12px 0 2px;font-size:.82rem;font-weight:400}
/* evidence kind filter: fade only while more pills remain; the log's new-lines pill gets its own room instead of covering lines */
.evfil.more{-webkit-mask-image:linear-gradient(90deg,#000 88%,transparent);mask-image:linear-gradient(90deg,#000 88%,transparent)}
.lvwrap:has(#lvNew:not([hidden])) #lvBody{margin-bottom:calc(52px + env(safe-area-inset-bottom))}
#lvNew{white-space:nowrap;max-width:90%}
#lvBody:focus-visible{outline:2px solid var(--acc-text);outline-offset:-2px}
/* light theme: the dotted trial line and its dot need more contrast than #4cd08a */
@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .evoln.c{stroke:#0a7a3e}:root:not([data-theme=dark]) .evodot.c{background:#0a7a3e}}
:root[data-theme=light] .evoln.c{stroke:#0a7a3e}:root[data-theme=light] .evodot.c{background:#0a7a3e}
/* Actors card: line series share the colours of the bar segments and legend dots (al alive / tr trial / re retired); dash cues stay: solid / dotted / dashed */
.evoln.al{stroke:#4da3ff}.evoln.tr{stroke:#4cd08a;stroke-dasharray:1 3;stroke-linecap:round}.evoln.re{stroke:#8b98a5;stroke-dasharray:6 3}.evodot.re{border-radius:0}.evodot.tr{border-radius:2px;transform:rotate(45deg)}
@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .evoln.al,:root:not([data-theme=dark]) .evodot.al,:root:not([data-theme=dark]) .evobar .al{stroke:#1f6fd0;background:#1f6fd0}:root:not([data-theme=dark]) .evoln.tr,:root:not([data-theme=dark]) .evodot.tr,:root:not([data-theme=dark]) .evobar .tr{stroke:#0a7a3e;background:#0a7a3e}:root:not([data-theme=dark]) .evoln.re,:root:not([data-theme=dark]) .evodot.re,:root:not([data-theme=dark]) .evobar .re{stroke:#5f6b76;background:#5f6b76}}
:root[data-theme=light] .evoln.al,:root[data-theme=light] .evodot.al,:root[data-theme=light] .evobar .al{stroke:#1f6fd0;background:#1f6fd0}
:root[data-theme=light] .evoln.tr,:root[data-theme=light] .evodot.tr,:root[data-theme=light] .evobar .tr{stroke:#0a7a3e;background:#0a7a3e}
:root[data-theme=light] .evoln.re,:root[data-theme=light] .evodot.re,:root[data-theme=light] .evobar .re{stroke:#5f6b76;background:#5f6b76}
.win .wl span:first-child{white-space:nowrap}
.win .wl span:last-child{text-align:right}
.bar{box-shadow:inset 0 0 0 1px #8887}
.pillbtn[data-pill="acc"] .badge{background:#46576a;color:#fff}
@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .evwarn{color:#8a5a00}}
:root[data-theme=light] .evwarn{color:#8a5a00}
.evbadge.keep,:root[data-theme=dark] .evbadge.keep{color:#5fd68f;border-color:#5fd68f}
.evbadge.shrink,:root[data-theme=dark] .evbadge.shrink{color:#e0a030;border-color:#e0a030}
.evbadge.stop,:root[data-theme=dark] .evbadge.stop{color:#ff8a7a;border-color:#ff8a7a}
:root[data-theme=dark] .evwarn{color:#e0a030}
@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .evbadge.keep{color:#1f8a4c;border-color:#1f8a4c}:root:not([data-theme=dark]) .evbadge.shrink{color:#8a5a00;border-color:#c78200}:root:not([data-theme=dark]) .evbadge.stop{color:#c0392b;border-color:#c0392b}}
:root[data-theme=light] .evbadge.keep{color:#1f8a4c;border-color:#1f8a4c}
:root[data-theme=light] .evbadge.shrink{color:#8a5a00;border-color:#c78200}
:root[data-theme=light] .evbadge.stop{color:#c0392b;border-color:#c0392b}
.evlbclose{top:max(8px,env(safe-area-inset-top));right:max(8px,env(safe-area-inset-right))}
.evlbcap{bottom:calc(34px + env(safe-area-inset-bottom))}.evlbpos{bottom:calc(10px + env(safe-area-inset-bottom))}
.evlberr{color:#ffd27a;padding:16px;text-align:center;font-size:1rem}
.evlbstage[aria-busy=true]::after{content:'…';color:#fff;font-size:2rem}
@media (max-width:640px){.evlb{padding:56px 4px 72px}}
.pnode circle.pnodehit,.pnode.on circle.pnodehit{fill:transparent;stroke:none}
@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .pnode circle{stroke:#1f6fd0}}
:root[data-theme=light] .pnode circle{stroke:#1f6fd0}
.pnode.on circle:not(.pnodehit){stroke-width:3}
.projgrp.more,.projtags.more,.verfil.more{-webkit-mask-image:linear-gradient(90deg,#000 88%,transparent);mask-image:linear-gradient(90deg,#000 88%,transparent)}
.evtvpanel{max-height:92vh;max-height:92dvh}.evtvbody{padding-bottom:max(12px,env(safe-area-inset-bottom))}
.evlbprev{left:max(6px,env(safe-area-inset-left))}.evlbnext{right:max(6px,env(safe-area-inset-right))}
.evrow>div{min-width:0;overflow-wrap:anywhere}
/* logs review 4: 44px targets, long names, error colour */
#logsLoad{min-height:44px}
#lv .lvbar .lvline{min-height:44px}
.lvretry button{min-height:44px;min-width:96px}
#lvSum summary{min-height:44px;display:flex;align-items:center;cursor:pointer}
.logitem{overflow-wrap:anywhere}

/* chat-review4 */
.cmpingo,.cmpinn,.cmact button,.cmmore{min-height:44px}
.cmb.cmclamp .cmmore{min-height:44px}
.cmtagpick{max-height:calc(var(--cmh,100dvh)*.36)}
@media (max-height:520px){.cmpics .pic{width:44px;height:44px}.cmchips{padding:2px 0 0}.cmreply{margin:2px 0}#cm .lvcomposer{padding-top:2px}}
#cm .lvmsginfo.err{font-size:.85rem;font-weight:600;line-height:1.3}
.cmm{font-size:.72rem}
@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .cmjump,:root:not([data-theme=dark]) .cmmore,:root:not([data-theme=dark]) .cmpinn,:root:not([data-theme=dark]) .cmpinrp,:root:not([data-theme=dark]) .cmrq b,:root:not([data-theme=dark]) .cmtapo b{color:var(--acc-text)}:root:not([data-theme=dark]) .cmmore,:root:not([data-theme=dark]) .cmpinn{border-color:var(--acc-text)}}
:root[data-theme=light] .cmjump,:root[data-theme=light] .cmmore,:root[data-theme=light] .cmpinn,:root[data-theme=light] .cmpinrp,:root[data-theme=light] .cmrq b,:root[data-theme=light] .cmtapo b{color:var(--acc-text)}
:root[data-theme=light] .cmmore,:root[data-theme=light] .cmpinn{border-color:var(--acc-text)}
/* review 5: .evopen (later, same specificity) flattened the document tiles; restore the card */
.evopen.evdocbtn{display:flex;padding:10px;border:1px solid #8884;border-radius:8px;cursor:pointer;background:transparent}
/* a card is a list item: the generic li:last-child{border:0} must not remove its border */
li.card{border:1px solid #8884}li.card.active{border-color:var(--acc)}
/* "new version ready" line (sw-reg.js) */
.swbar{position:fixed;left:0;right:0;bottom:0;z-index:60;display:flex;align-items:center;justify-content:center;gap:12px;padding:8px 12px calc(8px + env(safe-area-inset-bottom));background:var(--card);border-top:1px solid #8884;color:var(--fg)}.swbar button{min-height:44px;padding:0 16px}
/* ===== desktop layout: Projects list + project modal only (append-only) ===== */
@media (min-width:900px){
  .projlist,.projgrp,.projtags,.projgh,.pcount,.pgnav{max-width:760px}
  .pmpanel{width:min(820px,100%)}
  .pmbody .projrole,.pmbody .projtask,.pmbody .verchg,.pmbody .versum,.pmbody .evcap,.pmbody .evwarn,.pmbody .muted{max-width:70ch}
  .pmbody .projtask,.pmbody .projrole{overflow-wrap:break-word}
  .pmodal .evosubs.more{-webkit-mask-image:none;mask-image:none}
  .pmodal .evfil.more{-webkit-mask-image:none;mask-image:none}
  .projgrp.more,.projtags.more,.pmodal .verfil.more{-webkit-mask-image:none;mask-image:none}
  .projgrp,.projtags,.pmodal .evosubs,.pmodal .evfil,.pmodal .verfil{flex-wrap:wrap;overflow:visible}
}
@media (min-width:900px) and (hover:hover) and (pointer:fine){
  .projgrp .evtab,.projtags .evtab,.pmodal .evosubs .evotab,.pmodal .evfil .evtab,.pmodal .verfil .evtab,.pmodal .evby .evtab{min-height:36px;padding-top:2px;padding-bottom:2px}
}
.aiecoCard{margin:6px 0;padding:8px 12px;border-radius:12px;border:1px solid #8886;border-left-width:6px;display:flex;flex-direction:column;gap:2px;font-size:.92rem;overflow-wrap:anywhere}
.aiTop{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.aiState{font-size:1.05rem}.aiState::before{content:'';display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;background:var(--mut)}
.ai-active{border-left-color:var(--ok)}.ai-active .aiState{color:var(--ok)}.ai-active .aiState::before{background:var(--ok)}
.ai-stopped{border-left-color:var(--bad)}.ai-stopped .aiState{color:var(--bad)}.ai-stopped .aiState::before{background:var(--bad)}
.ai-stale{border-left-color:#d9a300;border-style:dashed;opacity:.85}.ai-stale .aiState{color:var(--fg)}.ai-stale .aiState::before{background:#d9a300}
.aiNote{color:var(--mut);font-size:.85rem}.ai-stale .aiNote:last-child{color:var(--fg);font-weight:600}
.aiVer{font-size:.9rem;overflow-wrap:anywhere}

/* status pills top-right: a row under the title on a phone, right-aligned; state in words, colour is extra */
.appPills{flex:1 1 0;min-width:0;flex-wrap:wrap;justify-content:flex-end;gap:18px 16px;padding:10px 10px 0 0}
@media (max-width:1100px){.appPills{order:3;flex-basis:100%;padding:6px 10px 0 0}}
.appPill{min-height:44px;padding:4px 14px;border-radius:99px;border:1px solid var(--mut);background:var(--card);color:var(--fg);font-size:.88rem;display:inline-flex;align-items:center;gap:6px}
.appPill::before{content:'';width:10px;height:10px;border-radius:50%;background:var(--mut);flex:none}
.ap-active{border-color:var(--ok)}.ap-active::before{background:var(--ok)}
.ap-down{border-color:var(--bad)}.ap-down::before{background:var(--bad)}
.ap-stale{border-style:dashed}.ap-stale::before{background:#d9a300}:root[data-theme=light] .ap-stale::before{background:#8a6500}@media (prefers-color-scheme:light){:root:not([data-theme=dark]) .ap-stale::before{background:#8a6500}}
.appPill.ap-open{background:#4da3ff26;box-shadow:inset 0 0 0 1px var(--acc-text)}.appPill:focus-visible,.appDetail .apClose:focus-visible{outline:3px solid var(--acc-text);outline-offset:2px}
.appPill:has(.appChk){padding:12px 12px 5px}.appPill .appTx{display:flex;flex-direction:column;align-items:center;line-height:1.2}.appPill .appChk{font-size:.7rem;color:var(--mut);white-space:nowrap}
.appWrap{position:relative;display:inline-flex;align-items:center;max-width:100%}
.appWrap>.appPill{flex:1 1 auto;justify-content:center}
/* notification-style: small round badges pinned half outside the pill's top-right corner; the right edge sticks out 8px, less than the 14px column gap, so a badge never touches the next pill */
.appBadges{position:absolute;top:-9px;right:-8px;z-index:1;display:flex;gap:3px;pointer-events:none}
.appVer,.appNew{padding:0 6px;min-width:20px;height:20px;border-radius:99px;font-size:.68rem;font-weight:700;line-height:20px;text-align:center;white-space:nowrap;box-shadow:0 0 0 2px var(--bg)}
.appVer{background:#46576a;color:#fff}
.appNew{background:#e0a030;color:#201400}
.apNewer{margin-top:4px;padding:4px 8px;border-radius:8px;background:#e0a030;color:#201400;font-size:.88rem}
.appDetail{margin:6px 0;padding:8px 12px;border-radius:12px;border:1px solid #8886;background:var(--card);font-size:.9rem;overflow-wrap:anywhere}
.appDetail .apTop{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:4px}
.appDetail .apClose{min-height:44px;min-width:44px;flex:none;white-space:nowrap}
.appDetail .apRow{padding:2px 0}
.cmb figure.chatfig{margin:6px 0;padding:0}
.cmb .chatcap{font-size:.85em;opacity:.8;margin-top:2px;overflow-wrap:anywhere}
.chatgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:4px;margin:6px 0}
.chatgrid .chatfig{margin:0}.cmb .chatgrid .chatpic.big{width:100%;height:84px;max-height:none;object-fit:cover;margin:0;border-radius:6px}
.chatgrid .chatcap{display:none}
.cmzoom{grid-template-rows:1fr auto auto;padding-bottom:env(safe-area-inset-bottom)}.cmzoom img{align-self:center}
.cmzoom .zbar{display:flex;align-items:center;justify-content:center;gap:18px;color:#fff;padding:6px}
.cmzoom .zbar button{position:static;font-size:1.8rem;min-width:56px;min-height:48px}
.cmzoom.single .zbar button{display:none}
.cmzoom .zcap{color:#fff;text-align:center;padding:0 14px 12px;font-size:.9rem;max-width:640px;justify-self:center}

/* picture viewer zoom / pan: the page behind never scrolls or zooms; a zoomed picture is dragged, not swiped */
.cmzoom{touch-action:none;overflow:hidden;overscroll-behavior:contain}.cmzoom img{transform-origin:center;user-select:none;-webkit-user-select:none;-webkit-user-drag:none;touch-action:none}.cmzoom.zoomed img{max-width:none;cursor:grab}
.cmzoom .zctl{position:absolute;top:calc(env(safe-area-inset-top) + 8px);left:10px;display:flex;align-items:center;gap:6px;color:#fff;z-index:2}.cmzoom .zctl button{position:static;font-size:1.5rem;min-width:44px;min-height:44px}.cmzoom .zctl span{min-width:3.4em;text-align:center;font-size:.9rem}

.ocVer{margin:16px 0 4px;text-align:center;font-size:.95rem}.ocVer button{background:none;border:0;color:var(--acc-text);text-decoration:underline;font:inherit;padding:10px;min-height:44px}
.ocWhat{background:var(--card);border-radius:12px;padding:12px;margin:0 0 8px;text-align:left}.ocWhat h3{margin:0 0 4px;font-size:.95rem}.ocWhat ul{margin:0 0 10px;padding-left:20px}.ocWhat .cur{color:var(--acc-text)}
/* badges stay on the pill corner on every width: only the row gap matters (see .appPills) */
/* touch: every ghost button is a 44 px target on a phone (Details / Open full view / Chat, Accounts Refresh, Show demo data were 37 px) */
@media (max-width:640px){button.ghost{min-height:44px}}

/* long unbroken text (names, tags, tokens) wraps inside the project window instead of scrolling sideways */
.pmbody{overflow-wrap:anywhere}

.projbtn .projnew{font-size:.78rem;line-height:1.3;overflow-wrap:anywhere}
.projbtn{max-width:100%;min-width:0}.projbtn>*{min-width:0;max-width:100%;overflow-wrap:anywhere}
