:root{--pad-bar:calc(var(--pad-b) * .55 + 2px);--pad-t:env(safe-area-inset-top,0px);--pad-b:env(safe-area-inset-bottom,0px);--pad-l:env(safe-area-inset-left,0px);--pad-r:env(safe-area-inset-right,0px);--bg:#0b0c14;--panel:#141625;--panel2:#1b1e31;--ink:#eef0ff;--dim:#9aa0c3;--line:rgba(160,170,255,.16);--acc:#7c8cff;--acc2:#46e0b0;--bad:#ff7a6b;--good:#46e0b0;--mine:#262c52}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;height:100%;overflow:hidden;overscroll-behavior:none;background:var(--bg);color:var(--ink);font:15px/1.45 -apple-system,"Segoe UI",system-ui,sans-serif;-webkit-text-size-adjust:100%}
*{-webkit-tap-highlight-color:transparent}
button,.room,.top,.chatHead,.listHead,.callbar .row{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.msgs,.list{overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
#app{position:fixed;inset:0;display:flex;flex-direction:column}   /* Rhema: the app is pinned to the screen */
button{font:inherit;cursor:pointer;border-radius:10px;border:1px solid var(--line);background:var(--panel2);color:var(--ink);padding:8px 14px}
button.act{background:var(--acc);border-color:var(--acc);color:#0b0c14;font-weight:600}
button.good{background:var(--good);border-color:var(--good);color:#0b0c14;font-weight:600}
button.bad{background:var(--bad);border-color:var(--bad);color:#0b0c14;font-weight:600}
button.ghost{background:none}
button.sm{padding:5px 11px;font-size:13.5px}
input,textarea{font:16px system-ui;width:100%;padding:11px 12px;border-radius:12px;border:1px solid var(--line);background:#0e1020;color:var(--ink);margin:6px 0}
.dim{color:var(--dim)}.pad{padding:14px}
.err{color:var(--bad);font-size:13.5px;min-height:1em}
.top{display:flex;align-items:center;gap:10px;padding:calc(var(--pad-t) + 8px) calc(var(--pad-r) + 14px) 8px calc(var(--pad-l) + 14px);border-bottom:1px solid var(--line);background:var(--panel)}
.brand{background:none;border:0;padding:0;font-weight:700;font-size:17px;display:flex;align-items:center;gap:6px}
.brand .ver{font:500 11.5px ui-monospace,monospace;color:var(--dim)}
.brand .upd{width:8px;height:8px;border-radius:50%;background:var(--acc2);box-shadow:0 0 8px var(--acc2)}
.who{margin-left:auto;color:var(--dim);font-size:13.5px}
.view{flex:1;min-height:0}
.card{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:18px}
.sign{max-width:420px;margin:8vh auto 0;width:calc(100% - 32px)}
.sign h1{margin:0 0 4px;font-size:22px}
.main{display:grid;grid-template-columns:300px 1fr}
.list{border-right:1px solid var(--line);overflow:auto;background:var(--panel)}
.listHead{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;border-bottom:1px solid var(--line)}
.room{display:grid;grid-template-columns:1fr auto;gap:2px 8px;width:100%;text-align:left;border:0;border-bottom:1px solid var(--line);border-radius:0;background:none;padding:11px 14px}
.room span{grid-column:1;font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.room i{grid-row:1;grid-column:2;font-style:normal;font-size:12px}
.room.on{background:var(--panel2)}
.room.unread b::after{content:'';display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--acc2);margin-left:6px;vertical-align:middle}
.chat{display:flex;flex-direction:column;min-height:0}
.chatHead{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--line)}
.chatHead .call{margin-left:auto}
.back{display:none;padding:4px 10px;font-size:20px}
.msgs{flex:1;overflow:auto;padding:12px 14px}
.msg{margin-top:10px;max-width:760px}.msg.cont{margin-top:2px}
.msg .meta{font-size:13px}.msg .meta i{font-style:normal;font-size:11.5px}
.msg .body{white-space:pre-wrap;word-wrap:break-word}
.msg.mine .body{color:#dfe3ff}
.msg.call{color:var(--dim);font-size:13.5px;text-align:center;max-width:none}
.composer{display:flex;gap:8px;align-items:flex-end;padding:6px calc(var(--pad-r) + 10px) var(--pad-bar) calc(var(--pad-l) + 10px);border-top:1px solid var(--line)}
.composer textarea{margin:0;resize:none;max-height:160px}
.sheet{position:fixed;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;padding:16px;z-index:20}
.sheet .card{width:min(440px,100%)}
.sheet h2{margin:0 0 4px}
.row{display:flex;gap:8px;justify-content:flex-end;align-items:center;margin-top:10px}
.person{display:flex;gap:8px;align-items:center;padding:6px 0}.person input{width:auto;margin:0}
.ring{position:fixed;left:50%;transform:translateX(-50%);top:calc(var(--pad-t) + 12px);z-index:30;background:var(--panel2);border:1px solid var(--acc);border-radius:16px;padding:14px 16px;box-shadow:0 16px 40px rgba(0,0,0,.5);width:min(380px,calc(100% - 24px))}
.callbar{position:fixed;left:0;right:0;bottom:0;z-index:25;background:var(--panel2);border-top:1px solid var(--acc);padding:10px calc(var(--pad-r) + 14px) calc(var(--pad-bar) + 4px) calc(var(--pad-l) + 14px)}
.cStats{font:12px ui-monospace,monospace;margin-top:2px;min-height:1.2em}
.hp{display:flex;align-items:center;gap:6px;margin-right:auto;font-size:13.5px}.hp input{width:auto;margin:0}
@media (max-width:720px){
  .main{grid-template-columns:1fr}
  body.inRoom .list{display:none}
  body:not(.inRoom) .chat{display:none}
  .back{display:inline-block}
}
.install{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;padding:calc(var(--pad-t) + 10px) calc(var(--pad-r) + 14px) 10px calc(var(--pad-l) + 14px);background:#1d2350;border-bottom:1px solid var(--acc);font-size:13.5px}
.install span.dim{flex:1 1 260px}.install .share{display:inline-block;border:1px solid var(--dim);border-radius:4px;padding:0 4px;font-size:11px}
.install:not([hidden]) + .top{padding-top:8px}
kbd{font:500 11px ui-monospace,monospace;opacity:.7;margin-left:4px}
.lat{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:6px}
input[type=range]{min-width:0}  /* slider rows fit on iPhone (Rhema 1.51.16) */
.roleTag{font:600 11px system-ui;color:#0b0c14;background:var(--acc2);border-radius:6px;padding:1px 6px}
body:not(.role-developer) .devOnly{display:none!important}
body.role-user .testOnly,body:not([class*=role-]) .testOnly{display:none!important}
body.role-user .cStats{display:none}
.card.dev{max-height:min(86vh,760px);overflow:auto;width:min(620px,100%)}
.card.dev h3{margin:14px 0 4px;font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--dim)}
.devBox{font-size:13px}.devRow{padding:4px 0;border-bottom:1px solid var(--line);font-size:12.5px;word-break:break-word}
/* friends' status on the avatar: installed = steady ring, notifications on = a light sweeping round, on screen = glow */
.av{--ring:transparent;position:relative;display:inline-grid;place-items:center;width:30px;height:30px;border-radius:50%;margin-right:9px;vertical-align:middle;flex:none;font-style:normal}
.av span{display:grid;place-items:center;width:100%;height:100%;border-radius:50%;background:var(--panel2);font:700 13px system-ui;color:var(--ink);position:relative;z-index:1}
.av::before{content:'';position:absolute;inset:-3px;border-radius:50%;border:2px solid var(--ring)}
.av.inst{--ring:rgba(124,140,255,.75)}
.av.noti::after{content:'';position:absolute;inset:-4px;border-radius:50%;padding:3px;background:conic-gradient(from 0deg,transparent 0 45%,rgba(124,140,255,.55) 65%,var(--acc) 82%,#fff 94%,transparent 100%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;animation:avSweep 2.6s linear infinite}
.av.live span{box-shadow:0 0 0 2px var(--good);animation:avGlow 1.8s ease-in-out infinite}
@keyframes avSweep{to{transform:rotate(360deg)}}
@keyframes avGlow{0%,100%{box-shadow:0 0 0 2px var(--good),0 0 6px 1px rgba(70,224,176,.45)}50%{box-shadow:0 0 0 2px var(--good),0 0 16px 5px rgba(70,224,176,.75)}}
@media (prefers-reduced-motion:reduce){.av.noti::after,.av.live span{animation:none}}
.room{grid-template-columns:auto 1fr auto}.room .av{grid-row:1/3;grid-column:1}.room b{grid-column:2}.room span{grid-column:2}.room i.dim{grid-column:3}
.chatHead b{display:flex;align-items:center}
.room .av span{grid-column:auto;font-size:13px}
/* Rhema's bottom rules: composers and bars sit on the home indicator with half its inset; lists keep the full inset clear */
html.standalone .list{padding-bottom:var(--pad-b)}
body.kb .composer,#app.kb .composer{padding-bottom:6px}
/* Unosyn's own keyboard (messaging only; from Rhema's Memorize keyboard): sits under the composer, the chat shrinks above it */
#composerWrap{flex:none}
.ukb{background:#0e1020;border-top:1px solid var(--line);padding:6px 3px var(--pad-bar);display:flex;flex-direction:column;gap:7px;touch-action:manipulation;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.ukb[hidden]{display:none}
.kbOpen .composer{padding-bottom:6px}
.ukr{display:flex;justify-content:center;gap:5px}
.uk{flex:1 1 0;min-width:0;max-width:44px;height:44px;padding:0;border-radius:8px;border:0;background:#2a2f4d;color:var(--ink);font:400 21px -apple-system,system-ui,sans-serif;box-shadow:0 1px 0 rgba(0,0,0,.5);transition:background 150ms,transform 150ms}
.uk.wide{flex:1.5 1 0;max-width:62px;font-size:15px;background:#1c2038}
.uk.space{flex:5 1 0;max-width:none;font-size:15px}
.ukr.bottom .uk{max-width:none}.ukr.bottom .uk.wide{flex:1.3 1 0}
.uk.on{background:#dfe3ff;color:#0b0c14}.uk.lock{box-shadow:inset 0 -3px 0 var(--acc)}
.uk.down{background:var(--acc);color:#0b0c14;transform:scale(.94)}
.row0{display:flex;gap:6px}
/* reactions (Rhema's pills): under the bubble, overlapping its edge a little; yours outlined */
.msg{position:relative;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;transition:transform .15s,filter .15s}
.msg.held{transform:scale(.97);filter:brightness(1.15)}
.msg.flash{animation:cbflash .9s ease-out}
@keyframes cbflash{0%{box-shadow:0 0 0 2px var(--acc);border-radius:10px}100%{box-shadow:0 0 0 2px transparent}}
.crx{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}
.rx{display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:99px;font-size:15px;line-height:1.2;background:var(--panel2);border:1px solid var(--line);touch-action:manipulation;-webkit-touch-callout:none}
.rx b{font:600 11px system-ui;color:var(--dim)}
.rx.mine{border-color:var(--acc);background:#232a55}
.crq{border-left:3px solid var(--acc);padding:2px 8px;margin:2px 0 3px;font-size:12.5px;color:var(--dim);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;cursor:pointer}
.crq b{color:var(--ink);font-weight:600}
.copied{animation:copiedFx .9s ease-out}@keyframes copiedFx{0%{background:rgba(124,140,255,.35)}100%{background:transparent}}
/* the reply thread above the composer */
#replyBox{border-top:1px solid var(--line);background:#11142a;padding:4px 10px 2px}
#replyBox .rbar{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;color:var(--dim)}
#replyBox .rth{max-height:min(34vh,260px);overflow:auto;overscroll-behavior:contain;padding:2px 0 4px}
.kbOpen #replyBox .rth{max-height:min(22vh,170px)}
#replyBox .rmsg{font-size:13px;padding:3px 6px;border-radius:8px;margin:2px 0}
#replyBox .rmsg b{font-weight:600;margin-right:4px}
#replyBox .rmsg.tgt{background:#232a55;box-shadow:inset 3px 0 0 var(--acc)}
/* the hold-and-slide chooser (ported from Rhema's 03-chat-reactions-lines.css) */
.rad{position:fixed;z-index:200;width:0;height:0;pointer-events:none;-webkit-user-select:none;user-select:none}
.rad .rhub{position:absolute;left:-22px;top:-22px;width:44px;height:44px;border-radius:50%;border:1px dashed var(--line);opacity:.8}
.rad .ra,.rad .rs{position:absolute;left:0;top:0;width:62px;height:62px;margin:-31px 0 0 -31px;border-radius:50%;display:grid;place-items:center;font-size:32px;will-change:transform,opacity;
  background:rgba(27,30,49,.96);border:1px solid var(--line);box-shadow:0 6px 18px rgba(0,0,0,.55);transform:rotate(var(--a)) translateY(0) rotate(calc(-1 * var(--a))) scale(.3);opacity:0;
  transition:transform .2s cubic-bezier(.2,1.4,.4,1),opacity .12s,background .1s}
.rad.on .ra{transform:rotate(var(--a)) translateY(calc(-1 * var(--r))) rotate(calc(-1 * var(--a))) scale(1);opacity:1}
.rad .rs{width:54px;height:54px;margin:-27px 0 0 -27px;font-size:28px}
.rad .rs.on{transform:rotate(var(--a)) translateY(calc(-1 * var(--r))) rotate(calc(-1 * var(--a))) scale(1);opacity:1}
.rad .ra small,.rad .rs small{position:absolute;top:100%;margin-top:4px;font:600 10px/1 -apple-system,system-ui,sans-serif;color:var(--ink);letter-spacing:.04em;text-shadow:0 1px 3px #000;opacity:0;transition:opacity .1s;white-space:nowrap}
.rad .ra.hot small,.rad .rs.hot small{opacity:1}
.rad .hot{background:#2c3470;border-color:var(--acc);transform:rotate(var(--a)) translateY(calc(-1 * var(--r))) rotate(calc(-1 * var(--a))) scale(1.22)!important}
.rad .cur{box-shadow:0 0 0 2px var(--acc),0 6px 18px rgba(0,0,0,.55)}
.rad em{font:600 13px/1.1 -apple-system,system-ui,sans-serif;font-style:normal;color:var(--ink);text-align:center;padding:0 4px}
.rad .rp{position:absolute;left:0;top:0;width:6px;height:6px;margin:-3px 0 0 -3px;border-radius:50%;background:var(--dim);opacity:0;transition:opacity .15s;pointer-events:none}
.rad.on .rp{opacity:.75}
.rad .rp.e{width:14px;height:14px;margin:-7px 0 0 -7px;background:none;font-size:10px;line-height:14px;text-align:center;font-style:normal}
.rad .rp.gone{opacity:0!important}
.rad.off .ra,.rad.off .rs{transition:transform .18s ease-in,opacity .18s ease-in}
.rad.off .chosen{opacity:1!important;transform:rotate(var(--a)) translateY(calc(-1 * var(--r))) rotate(calc(-1 * var(--a))) scale(1.5)!important;transition:transform .18s,opacity .18s}
.rad.sticky .rhub{opacity:.5}
