/* TABLE TALK (Build 48) — see table-chat.js for the design and its laws.
   One panel, three postures: [data-mode=dock] on-demand history above the permanent desktop strip,
   [data-mode=sheet] phone pull-up, [data-mode=drawer] landscape/tablet side drawer.
   Unavailable tables stay hidden; hosted wide tables retain a permanent strip. */
.tcPanel[hidden],.tcScrim[hidden],.tcFab[hidden],.tcTray[hidden],.tcJump[hidden],.tcAsk[hidden],.tcTurn[hidden],.tcUnread[hidden],.tcFabN[hidden]{display:none!important}
.tcStrip[hidden],.tcTypingList[hidden]{display:none!important}
.tcStrip{position:fixed;z-index:27;box-sizing:border-box;display:grid;grid-template-columns:minmax(0,1fr) 88px;grid-template-rows:minmax(0,1fr) 20px;column-gap:16px;padding:5px 14px;color:var(--ivory,#F5EFDD);font:500 14px/20px Barlow,'Segoe UI',sans-serif;background:linear-gradient(180deg,#0b251e,#071b16);border-top:1px solid rgba(201,162,75,.45);box-shadow:inset 0 1px 8px rgba(0,0,0,.25)}
.tcRecent{min-width:0;overflow:hidden;display:flex;flex-direction:column;justify-content:center}
.tcRecentMessage{display:flex;align-items:baseline;gap:4px;flex:none;height:20px;min-width:0;padding:0;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}
.tcRecentMessage b{max-width:35%;flex-shrink:0;font-size:12px;font-weight:600;color:var(--brass-hi,#E8C87A);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.tcRecentMessage span{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.tcRecentMessage:hover span{text-decoration:underline;text-decoration-color:rgba(232,200,122,.5)}
.tcRecentEmpty{color:var(--muted,#8CA69A);font-size:13px}
.tcStripTyping{grid-row:2;min-width:0;display:flex;align-items:center;gap:7px;color:var(--brass-hi,#E8C87A);font-size:12px;line-height:20px}
.tcStripTyping .tcTypingDots{padding:4px 6px}.tcStripTyping .tcTypingRest{font-size:11px;color:var(--muted,#8CA69A)}
.tcChatB{grid-column:2;grid-row:1/3;align-self:center;height:36px;border:1px solid rgba(201,162,75,.4);border-radius:4px;background:#123528;color:var(--brass-hi,#E8C87A);font:600 14px Barlow,sans-serif;cursor:pointer}
.tcChatB:hover,.tcChatB[aria-expanded=true]{background:#1b4435;border-color:var(--brass,#C9A24B)}
.tcTypingMore{flex:none;padding:0;border:0;background:none;color:inherit;font:inherit;text-decoration:underline;cursor:pointer}
.tcTypingList{position:absolute;bottom:calc(100% + 8px);left:12px;max-width:calc(100% - 24px);max-height:180px;overflow:auto;padding:10px 14px;background:#0a211b;border:1px solid rgba(201,162,75,.5);border-radius:4px;box-shadow:0 8px 24px #0008;color:var(--ivory,#F5EFDD);overflow-wrap:anywhere}
.tcStrip button:focus-visible{outline:2px solid var(--brass-hi,#E8C87A);outline-offset:1px}
body:not(.playing) .tcStrip,body.meta-open .tcStrip{display:none!important}
.tcPanel[data-mode=dock]{border-radius:6px;box-shadow:0 10px 28px #0008;background:#071b16}
.tcPanel[data-mode=dock]>.tcTyping{display:none}
.tcPanel[data-mode=dock] .tcToggle svg{transform:rotate(0)}
.tcPanel[data-mode=dock] .tcToggle svg path{d:path('M6 6l12 12M18 6L6 18')}
.tcPanel{--tc-brass:var(--brass,#C9A24B);--tc-brass-hi:var(--brass-hi,#E8C87A);--tc-ink:var(--ink,#05130E);--tc-ink2:var(--ink-2,#0A211B);--tc-ink3:var(--ink-3,#123528);--tc-ivory:var(--ivory,#F5EFDD);--tc-muted:var(--muted,#8CA69A);
 position:fixed;z-index:27;box-sizing:border-box;display:flex;flex-direction:column;min-width:0;color:var(--tc-ivory);font-family:Barlow,'Segoe UI',sans-serif;
 border:1px solid rgba(210,180,104,.44);border-radius:6px;
 background:linear-gradient(180deg,rgba(9,33,25,.985),rgba(6,23,17,.985) 38%,rgba(4,17,13,.99));
 box-shadow:0 14px 34px rgba(0,0,0,.5),inset 0 0 0 3px rgba(4,17,13,.9),inset 0 0 0 4px rgba(210,180,104,.16),inset 0 1px 0 rgba(255,236,180,.1)}
.tcPanel *{box-sizing:border-box}
.tcTyping{flex:none;height:28px;min-height:28px;display:flex;align-items:center;gap:8px;padding:0 12px;border-top:1px solid rgba(210,180,104,.12);color:var(--tc-brass-hi);font:500 12px/1.2 Barlow,sans-serif;min-width:0}
.tcTypingNames{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.tcTypingRest{color:var(--tc-muted);font-size:11px;letter-spacing:.035em}
.tcTypingDots{flex:none;display:flex;gap:3px;padding:5px 7px;border-radius:10px;background:rgba(201,162,75,.12)}
.tcTypingDots i{width:3px;height:3px;border-radius:50%;background:currentColor;animation:tcTypingBeat 1.2s ease-in-out infinite}
.tcTypingDots i:nth-child(2){animation-delay:.15s}.tcTypingDots i:nth-child(3){animation-delay:.3s}
@keyframes tcTypingBeat{0%,60%,100%{opacity:.4;transform:translateY(0)}30%{opacity:1;transform:translateY(-2px)}}
@media(prefers-reduced-motion:reduce){.tcTypingDots i{animation:none}}
html.exchangeReducedUI .tcTypingDots i{animation:none}
.tcGrip{display:none}
.tcHead{flex:none;display:flex;align-items:center;gap:6px;min-width:0;height:34px;padding:0 6px 0 12px;border-bottom:1px solid rgba(210,180,104,.2);background:linear-gradient(180deg,rgba(18,53,40,.55),rgba(18,53,40,0))}
.tcTitle{flex:1;min-width:0;display:flex;align-items:center;gap:8px;height:100%;padding:0;border:0;background:none;color:var(--tc-brass-hi);cursor:pointer;text-align:left;font:900 14px/1 'Barlow Semi Condensed',Barlow,sans-serif;letter-spacing:.11em}
.tcGlyph{flex:none;width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linejoin:round}
.tcTitleText{flex:none;white-space:nowrap}
.tcTitle.hasPreview .tcTitleText{display:none}.tcTitle.hasPreview .tcPreview{color:var(--tc-ivory);font-size:13px}
.tcUnread,.tcFabN{flex:none;min-width:17px;height:17px;padding:0 5px;border-radius:9px;background:linear-gradient(180deg,#F2DFA8,#C9A24B);color:#172019;font:800 11px/17px Barlow,sans-serif;font-style:normal;letter-spacing:0;text-align:center}
.tcPreview{flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--tc-muted);font:500 12px/1 Barlow,sans-serif;letter-spacing:.01em;text-transform:none}
.tcIcon{flex:none;width:30px;height:28px;display:grid;place-items:center;padding:0;border:1px solid transparent;border-radius:4px;background:none;color:var(--tc-brass);cursor:pointer}
.tcIcon:hover{border-color:rgba(210,180,104,.34);background:rgba(18,53,40,.7)}
.tcIcon svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.tcMute .tcBell{fill:currentColor;stroke:none}.tcMute .tcSlash{opacity:0}.tcMute[aria-pressed=true]{color:var(--tc-muted)}.tcMute[aria-pressed=true] .tcSlash{opacity:1;stroke:#E2775B;stroke-width:2.2}
.tcToggle svg{transition:transform .2s ease}.tcPanel[data-mode=dock][data-open="0"] .tcToggle svg{transform:rotate(180deg)}
.tcTurn{flex:none;height:24px;padding:0 9px;border:1px solid rgba(111,227,165,.7);border-radius:12px;background:rgba(20,70,48,.9);color:#BFF3D6;font:800 10px/1 Barlow,sans-serif;letter-spacing:.1em;cursor:pointer;animation:tcTurnPulse 1.6s ease-in-out infinite}
.tcBody{flex:1;min-height:0;overflow:hidden;display:flex;flex-direction:column;position:relative;padding:0 8px 8px}
.tcLog{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:rgba(201,162,75,.55) transparent;padding:6px 4px 4px;margin:0 -2px}
.tcLog:focus-visible,.tcPanel button:focus-visible,.tcInput:focus-visible,.tcFab:focus-visible{outline:2px solid var(--brass-hi,#E8C87A);outline-offset:1px}
.tcEmpty{margin:10px 4px;color:var(--tc-muted);font:italic 400 13px/1.4 Georgia,'Times New Roman',serif}
.tcRow{display:block;margin:7px 0 0;font:400 14px/1.38 Barlow,sans-serif;overflow-wrap:anywhere;word-break:break-word}
.tcRow.cont{margin-top:2px}.tcRow.cont .tcWho{display:none}
.tcWho{display:block;margin:0 0 1px;padding:0;border:0;background:none;color:var(--tc-brass-hi);font:800 10.5px/1.2 Barlow,sans-serif;letter-spacing:.1em;text-align:left;cursor:pointer}
button.tcWho:hover{text-decoration:underline}
.tcRow.mine .tcWho{color:#9FE0BE;cursor:default}
.tcText{display:block;color:var(--tc-ivory)}
.tcRow.mine .tcText{color:#DDEBE2}
.tcChip{display:inline-flex;align-items:center;gap:7px;padding:3px 10px 3px 5px;border:1px solid rgba(210,180,104,.34);border-radius:14px;background:rgba(18,53,40,.6);color:var(--tc-brass-hi)}
.tcChip b{font:800 10.5px/1 Barlow,sans-serif;letter-spacing:.1em}
.tcChip .tcMark{width:22px;height:22px}
.tcJump{position:absolute;left:50%;transform:translateX(-50%);bottom:64px;z-index:2;height:24px;padding:0 12px;border:1px solid rgba(232,200,122,.6);border-radius:12px;background:var(--tc-ink3);color:var(--tc-brass-hi);font:800 10px/1 Barlow,sans-serif;letter-spacing:.1em;cursor:pointer;box-shadow:0 6px 16px rgba(0,0,0,.5)}
.tcAsk{flex:none;display:flex;align-items:center;gap:6px;margin:4px 0;padding:6px 8px;border:1px solid rgba(210,180,104,.3);border-radius:4px;background:var(--tc-ink2);font:500 12.5px/1.25 Barlow,sans-serif}
.tcAsk span{flex:1;min-width:0}
.tcAskB{flex:none;height:28px;padding:0 10px;border:1px solid rgba(232,200,122,.55);border-radius:4px;background:var(--tc-ink3);color:var(--tc-brass-hi);font:800 10.5px/1 Barlow,sans-serif;letter-spacing:.1em;cursor:pointer}
.tcAskB.ghost{border-color:rgba(140,166,154,.4);color:var(--tc-muted);background:none}
/* the reaction tray: every gesture on one sheet, four to a row (the Build 417 sheet law) */
.tcTray{flex:0 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:5px;margin:4px 0 6px;padding:6px;border:1px solid rgba(210,180,104,.26);border-radius:6px;background:rgba(4,17,13,.82);animation:tcTrayIn .16s ease-out both}
.tcEmote{min-width:0;min-height:52px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:4px 2px;border:1px solid rgba(210,180,104,.22);border-radius:5px;background:linear-gradient(180deg,rgba(18,53,40,.75),rgba(10,33,27,.75));color:var(--tc-brass-hi);cursor:pointer}
.tcEmote:hover,.tcEmote:focus-visible{border-color:rgba(232,200,122,.75);background:linear-gradient(180deg,rgba(28,74,56,.9),rgba(12,40,31,.9))}
.tcEmote:active{transform:scale(.96)}
.tcEmote .tcMark{width:26px;height:26px}
.tcEmote span{max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font:800 8.5px/1 Barlow,sans-serif;letter-spacing:.08em;color:var(--tc-ivory);opacity:.86}
.tcComposer{flex:none;display:flex;align-items:center;gap:6px;min-width:0;margin-top:4px}
.tcEmoteB{width:38px;height:38px;border-color:rgba(210,180,104,.34);background:var(--tc-ink2)}
.tcEmoteB .tcMark{width:22px;height:22px}.tcEmoteB.on{border-color:var(--tc-brass-hi);background:var(--tc-ink3)}
.tcInput{flex:1;min-width:0;height:38px;padding:0 10px;border:1px solid rgba(210,180,104,.34);border-radius:4px;background:rgba(3,13,10,.9);color:var(--tc-ivory);font:400 16px/1 Barlow,sans-serif;letter-spacing:normal;text-transform:none;box-shadow:inset 0 2px 6px rgba(0,0,0,.45)}
.tcInput::placeholder{color:rgba(140,166,154,.8)}
.tcSend{flex:none;height:38px;min-width:56px;padding:0 10px;border:1px solid rgba(107,78,20,.9);border-radius:4px;background:linear-gradient(180deg,#E8C87A,#B98F3A);color:#172019;font:900 11px/1 'Barlow Semi Condensed',Barlow,sans-serif;letter-spacing:.12em;cursor:pointer;box-shadow:inset 0 1px rgba(255,255,255,.4)}
.tcSend:disabled{opacity:.55;cursor:default}
.tcStatus{flex:none;display:block;min-height:0;margin-top:3px;color:var(--tc-brass-hi);font:500 11.5px/1.25 Barlow,sans-serif}.tcStatus:empty{display:none}
/* line marks */
.tcMark{display:block;fill:none;stroke:currentColor;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round;overflow:visible}
.tcMark .tcg-fill{fill:currentColor;stroke-width:1.2}
.tcMark *{transform-box:fill-box;transform-origin:center}

/* ── DOCK: minimised shows the header and the composer only ── */
.tcPanel[data-mode=dock]{transition:height .22s cubic-bezier(.2,.8,.25,1)}
.tcPanel[data-mode=dock][data-open="0"] .tcLog,.tcPanel[data-mode=dock][data-open="0"] .tcJump,.tcPanel[data-mode=dock][data-open="0"] .tcAsk,.tcPanel[data-mode=dock][data-open="0"] .tcStatus{display:none}
.tcPanel[data-mode=dock][data-open="0"] .tcBody{overflow:visible;justify-content:flex-end;padding-bottom:6px}
.tcPanel[data-mode=dock][data-open="0"] .tcHead{height:30px;border-bottom-color:transparent}
.tcPanel[data-mode=dock] .tcInput{font-size:14px}
.tcPanel[data-mode=dock][data-open="0"] .tcTray{position:absolute;left:8px;right:8px;bottom:50px;margin:0;box-shadow:0 -10px 26px rgba(0,0,0,.6)}

/* ── SHEET (phone) and DRAWER (landscape / tablet) ── */
.tcScrim{position:fixed;inset:0;z-index:39;background:linear-gradient(180deg,rgba(2,9,7,0) 30%,rgba(2,9,7,.42));-webkit-tap-highlight-color:transparent}
.tcPanel[data-mode=sheet]{z-index:40;left:0;right:0;bottom:var(--tc-kb,0px);width:auto;height:min(60vh,470px);max-height:calc(var(--tc-vvh,100vh) - 12px);border-radius:16px 16px 0 0;border-bottom:0;padding-bottom:env(safe-area-inset-bottom,0px);animation:tcSheetIn .24s cubic-bezier(.2,.8,.25,1) both;box-shadow:0 -18px 44px rgba(0,0,0,.62),inset 0 1px 0 rgba(255,236,180,.16)}
.tcPanel[data-mode=sheet] .tcGrip{display:block;flex:none;width:44px;height:4px;margin:7px auto 0;border-radius:2px;background:rgba(210,180,104,.5)}
.tcPanel[data-mode=sheet] .tcHead,.tcPanel[data-mode=drawer] .tcHead{height:44px;touch-action:none}
.tcPanel[data-mode=sheet] .tcIcon,.tcPanel[data-mode=drawer] .tcIcon{width:44px;height:40px}
.tcPanel[data-mode=sheet] .tcToggle svg,.tcPanel[data-mode=drawer] .tcToggle svg{width:20px;height:20px}
.tcPanel[data-mode=sheet] .tcTurn,.tcPanel[data-mode=drawer] .tcTurn{height:30px}
.tcPanel[data-mode=sheet] .tcInput,.tcPanel[data-mode=sheet] .tcSend,.tcPanel[data-mode=sheet] .tcEmoteB,.tcPanel[data-mode=drawer] .tcInput,.tcPanel[data-mode=drawer] .tcSend,.tcPanel[data-mode=drawer] .tcEmoteB{height:44px}
.tcPanel[data-mode=sheet] .tcEmoteB,.tcPanel[data-mode=drawer] .tcEmoteB{width:44px}
.tcPanel[data-mode=sheet] .tcEmote,.tcPanel[data-mode=drawer] .tcEmote{min-height:60px}
.tcPanel[data-mode=sheet] .tcEmote .tcMark,.tcPanel[data-mode=drawer] .tcEmote .tcMark{width:30px;height:30px}
.tcPanel[data-mode=sheet] .tcEmote span,.tcPanel[data-mode=drawer] .tcEmote span{font-size:9.5px}
.tcPanel[data-mode=sheet] .tcRow,.tcPanel[data-mode=drawer] .tcRow{font-size:15px}
.tcPanel[data-mode=sheet] .tcBody{padding:0 10px 10px}
.tcPanel[data-mode=drawer]{z-index:40;top:var(--tc-vtop,0px);right:0;bottom:var(--tc-kb,0px);left:auto;width:min(340px,46vw);height:auto;border-radius:12px 0 0 12px;border-right:0;padding-right:env(safe-area-inset-right,0px);animation:tcDrawerIn .22s cubic-bezier(.2,.8,.25,1) both}
.tcPanel[data-mode=drawer] .tcToggle svg{transform:rotate(-90deg)}

/* the phone's one control: a chat button in the top-right utility cluster, beside the bell */
/* #v2badge is a right-aligned COLUMN (bell above gear). The chat button must not push the gear down into the
   rival fan, so it sits out of flow on the cluster's first row, immediately left of it. */
.tcFab{position:absolute;top:0;right:calc(100% + 8px);flex:none;width:34px;min-width:34px;height:36px;display:flex;align-items:center;justify-content:center;padding:7px;border:1px solid rgba(201,162,75,.42);border-radius:var(--r-chip,4px);background:rgba(5,19,14,.9);color:var(--brass,#C9A24B);cursor:pointer;box-shadow:0 5px 16px rgba(0,0,0,.3);-webkit-tap-highlight-color:transparent}
.tcFab svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linejoin:round}
.tcFab.hasNew{border-color:rgba(232,200,122,.85);color:var(--brass-hi,#E8C87A)}
.tcFabN{position:absolute;top:-7px;right:-7px;box-shadow:0 2px 6px rgba(0,0,0,.5)}
@media(max-width:1179px),(pointer:coarse){.tcFab{width:44px;min-width:44px;height:44px}.tcFab svg{width:20px;height:20px}}
.tcFab.tcFabFree{position:fixed;right:auto;z-index:28;width:44px;min-width:44px;height:44px;border-radius:50%;background:radial-gradient(circle at 50% 35%,rgba(18,53,40,.96),rgba(5,19,14,.96));box-shadow:0 6px 16px rgba(0,0,0,.45),inset 0 0 0 2px rgba(5,19,14,.9),inset 0 0 0 3px rgba(210,180,104,.22)}
.tcFab.tcFabFree .tcFabN{top:0;right:0}
.tcFab.nudge{animation:tcFabNudge 1.2s cubic-bezier(.3,.8,.3,1) 1}
@keyframes tcFabNudge{0%{box-shadow:0 0 0 0 rgba(232,200,122,.75)}18%{transform:scale(1.12)}40%{transform:scale(1)}100%{box-shadow:0 0 0 14px rgba(232,200,122,0)}}
body.tc-sheet-open .tcFab{border-color:var(--brass-hi,#E8C87A)}

/* ── seat bubbles and gesture animations ── */
.tcFxLayer{position:fixed;inset:0;z-index:29;pointer-events:none;overflow:hidden;contain:layout style}
.tcBubble{position:absolute;box-sizing:border-box;max-width:min(230px,62vw);padding:6px 10px 7px;border:1px solid rgba(210,180,104,.6);border-radius:10px;background:linear-gradient(180deg,rgba(18,53,40,.97),rgba(5,19,14,.97));color:var(--ivory,#F5EFDD);box-shadow:0 10px 26px rgba(0,0,0,.55);animation:tcBubbleIn .2s cubic-bezier(.2,.9,.3,1.2) both;font:400 13.5px/1.3 Barlow,sans-serif}
.tcBubble b{display:block;margin-bottom:1px;color:var(--brass-hi,#E8C87A);font:800 9.5px/1.2 Barlow,sans-serif;letter-spacing:.1em}
.tcBubble span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.tcBubble::after{content:'';position:absolute;left:var(--tc-tail,50%);bottom:-5px;width:8px;height:8px;margin-left:-4px;transform:rotate(45deg);background:rgba(5,19,14,.97);border-right:1px solid rgba(210,180,104,.6);border-bottom:1px solid rgba(210,180,104,.6)}
.tcBubble.below::after{bottom:auto;top:-5px;transform:rotate(225deg);background:rgba(18,53,40,.97)}
.tcBubble.tcPill{display:flex;align-items:center;gap:8px;padding:0 12px;border-radius:var(--r-chip,4px);white-space:nowrap;overflow:hidden;animation:tcPillIn .22s cubic-bezier(.2,.9,.3,1) both}
.tcBubble.tcPill::after{display:none}
.tcBubble.tcPill b{flex:none;display:block;margin:0;padding-right:8px;border-right:1px solid rgba(210,180,104,.4);font-size:10px;line-height:1}
.tcBubble.tcPill span{display:block;flex:1;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;-webkit-line-clamp:unset;font-size:14px;line-height:1.2}
.tcBubble span i{font-style:normal}
.tcBubble.tcPill span.glide{text-overflow:clip}.tcBubble.tcPill span.glide i{display:inline-block;animation:tcGlide var(--tc-glide-s,3s) ease-in-out 1.1s 1 both}
@keyframes tcPillIn{from{opacity:0;transform:translateX(14px)}}
@keyframes tcGlide{0%{transform:translateX(0)}70%,100%{transform:translateX(var(--tc-glide,0px))}}
.tcBubble.out{animation:tcBubbleOut .18s ease-in both}
.tcFx{position:absolute;width:var(--tc-fx,68px);height:var(--tc-fx,68px);margin:calc(var(--tc-fx,68px)/-2) 0 0 calc(var(--tc-fx,68px)/-2);color:#F2DFA8;animation:tcFxLife 2.1s linear both}
.tcFxDisc{position:absolute;inset:0;display:grid;place-items:center;border-radius:50%;border:1.5px solid rgba(232,200,122,.9);background:radial-gradient(circle at 50% 35%,#1d5540,#0a211b 62%,#05130e);box-shadow:0 8px 22px rgba(0,0,0,.6),inset 0 0 0 3px rgba(5,19,14,.85),inset 0 0 0 4px rgba(210,180,104,.35);animation:tcFxPop .42s cubic-bezier(.2,1.5,.4,1) both}
.tcFxDisc .tcMark{width:62%;height:62%}
.tcFxRing{position:absolute;inset:-2px;border-radius:50%;border:2px solid rgba(232,200,122,.8);animation:tcFxRing .7s ease-out .08s both}
.tcFxLabel{position:absolute;left:50%;top:100%;transform:translateX(-50%);margin-top:5px;padding:2px 8px;border-radius:9px;border:1px solid rgba(210,180,104,.5);background:rgba(5,19,14,.94);color:#F2DFA8;font:800 9px/1.3 Barlow,sans-serif;letter-spacing:.12em;white-space:nowrap;animation:tcFxLabel .3s ease-out .18s both}
.tcSpark{position:absolute;left:50%;top:50%;width:5px;height:5px;margin:-2.5px;border-radius:50%;background:#F2DFA8;box-shadow:0 0 6px rgba(242,223,168,.9);transform:rotate(var(--a)) translateY(0);animation:tcSpark .9s cubic-bezier(.15,.7,.3,1) .12s both}
.tcMood-jolt .tcFxDisc{animation:tcFxPop .3s cubic-bezier(.2,1.6,.4,1) both,tcJolt .5s linear .3s 1}
.tcMood-bounce .tcFxDisc{animation:tcFxPop .42s cubic-bezier(.2,1.5,.4,1) both,tcBounce .9s ease-in-out .42s 1}
.tcMood-jolt .tcFxRing{border-color:rgba(226,119,91,.85)}
/* each mark performs once: on the table (.tcFx), and in the log when it arrives (.tcChip.play) */
.tcFx .tcg-rays,.tcChip.play .tcg-rays{animation:tcRays 1.3s ease-out .2s both}
.tcFx .tcg-core,.tcChip.play .tcg-core{animation:tcSpin 1.1s cubic-bezier(.3,.8,.3,1) .15s both}
.tcFx .tcg-glassL,.tcChip.play .tcg-glassL{transform-origin:50% 100%;animation:tcClinkL 1.2s ease-in-out .25s both}
.tcFx .tcg-glassR,.tcChip.play .tcg-glassR{transform-origin:50% 100%;animation:tcClinkR 1.2s ease-in-out .25s both}
.tcFx .tcg-spark,.tcChip.play .tcg-spark{animation:tcTwinkle 1.2s ease-out .55s both}
.tcFx .tcg-burst,.tcChip.play .tcg-burst{animation:tcBurst .7s cubic-bezier(.2,1.6,.4,1) .1s both}
.tcFx .tcg-bang,.tcChip.play .tcg-bang{animation:tcSlam .5s cubic-bezier(.2,1.7,.4,1) .22s both}
.tcFx .tcg-ha1,.tcChip.play .tcg-ha1{animation:tcHop .5s ease-in-out .2s 2}
.tcFx .tcg-ha2,.tcChip.play .tcg-ha2{animation:tcHop .5s ease-in-out .32s 2}
.tcFx .tcg-ha3,.tcChip.play .tcg-ha3{animation:tcHop .5s ease-in-out .44s 2}
.tcFx .tcg-hat,.tcChip.play .tcg-hat{transform-origin:20% 90%;animation:tcTip 1.4s ease-in-out .25s both}
.tcFx .tcg-bow,.tcChip.play .tcg-bow{animation:tcTwinkle 1.4s ease-in-out .3s both}
.tcFx .tcg-coinL,.tcChip.play .tcg-coinL{animation:tcSplitL 1.3s cubic-bezier(.3,.8,.3,1) .3s both}
.tcFx .tcg-coinR,.tcChip.play .tcg-coinR{animation:tcSplitR 1.3s cubic-bezier(.3,.8,.3,1) .3s both}
.tcFx .tcg-pupil,.tcChip.play .tcg-pupil{animation:tcLook 1.5s ease-in-out .2s both}
.tcFx .tcg-brow,.tcChip.play .tcg-brow{animation:tcBrow 1.5s ease-in-out .2s both}
.tcFx .tcg-glass,.tcChip.play .tcg-glass{animation:tcFlip 1.4s cubic-bezier(.5,0,.3,1) .3s both}
.tcFx .tcg-grain,.tcChip.play .tcg-grain{stroke-dasharray:2 3;animation:tcGrain .35s linear 4}
.tcFx.still,.tcFx.still *{animation-duration:.01s!important;animation-delay:0s!important}
.tcFx.still{animation:tcFxStill 1.5s linear both!important}

@keyframes tcTurnPulse{50%{box-shadow:0 0 0 4px rgba(111,227,165,.18)}}
@keyframes tcTrayIn{from{opacity:0;transform:translateY(6px)}}
@keyframes tcSheetIn{from{transform:translateY(100%)}}
@keyframes tcDrawerIn{from{transform:translateX(100%)}}
@keyframes tcBubbleIn{from{opacity:0;transform:translateY(6px) scale(.94)}}
@keyframes tcBubbleOut{to{opacity:0;transform:translateY(-4px)}}
@keyframes tcFxLife{0%,84%{opacity:1}100%{opacity:0;transform:translateY(-8px) scale(.94)}}
@keyframes tcFxStill{0%,85%{opacity:1}100%{opacity:0}}
@keyframes tcFxPop{from{opacity:0;transform:scale(.3)}}
@keyframes tcFxRing{from{opacity:.9;transform:scale(.8)}to{opacity:0;transform:scale(1.7)}}
@keyframes tcFxLabel{from{opacity:0;transform:translate(-50%,-6px)}}
@keyframes tcSpark{0%{opacity:0;transform:rotate(var(--a)) translateY(-14px) scale(.4)}25%{opacity:1}100%{opacity:0;transform:rotate(var(--a)) translateY(calc(var(--tc-fx,68px)*-.95*var(--d,1))) scale(1)}}
@keyframes tcJolt{0%,100%{transform:translate(0)}15%{transform:translate(-5px,2px) rotate(-5deg)}30%{transform:translate(5px,-2px) rotate(5deg)}45%{transform:translate(-4px,1px) rotate(-3deg)}60%{transform:translate(3px,0) rotate(2deg)}80%{transform:translate(-1px,0)}}
@keyframes tcBounce{0%,100%{transform:translateY(0)}25%{transform:translateY(-9px)}50%{transform:translateY(0)}72%{transform:translateY(-4px)}}
@keyframes tcRays{0%{opacity:0;transform:scale(.4) rotate(-20deg)}35%{opacity:1;transform:scale(1.08) rotate(6deg)}100%{opacity:.85;transform:scale(1) rotate(0)}}
@keyframes tcSpin{0%{transform:scale(.2) rotate(-140deg)}60%{transform:scale(1.18) rotate(12deg)}100%{transform:scale(1) rotate(0)}}
@keyframes tcClinkL{0%,100%{transform:rotate(0)}35%{transform:rotate(-16deg)}55%{transform:rotate(11deg) translateX(1px)}70%{transform:rotate(7deg)}}
@keyframes tcClinkR{0%,100%{transform:rotate(0)}35%{transform:rotate(16deg)}55%{transform:rotate(-11deg) translateX(-1px)}70%{transform:rotate(-7deg)}}
@keyframes tcTwinkle{0%{opacity:0;transform:scale(.3)}40%{opacity:1;transform:scale(1.25)}100%{opacity:.9;transform:scale(1)}}
@keyframes tcBurst{0%{transform:scale(.3) rotate(-30deg)}100%{transform:scale(1) rotate(0)}}
@keyframes tcSlam{0%{opacity:0;transform:translateY(-16px) scale(1.6)}100%{opacity:1;transform:none}}
@keyframes tcHop{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
@keyframes tcTip{0%,100%{transform:rotate(0)}30%,62%{transform:rotate(-24deg) translateY(-3px)}}
@keyframes tcSplitL{0%,18%{transform:none}30%{transform:translate(-1px,0) rotate(-2deg)}55%,100%{transform:translate(-4px,1px) rotate(-9deg)}}
@keyframes tcSplitR{0%,18%{transform:none}30%{transform:translate(1px,0) rotate(2deg)}55%,100%{transform:translate(4px,1px) rotate(9deg)}}
@keyframes tcLook{0%,100%{transform:translateX(0)}22%,40%{transform:translateX(-7px)}60%,80%{transform:translateX(7px)}}
@keyframes tcBrow{0%,100%{transform:none}22%,80%{transform:translateY(3px) rotate(-5deg)}}
@keyframes tcFlip{0%{transform:rotate(0)}60%,100%{transform:rotate(180deg)}}
@keyframes tcGrain{to{stroke-dashoffset:-5}}

/* Compact preview / inspection / planning own the screen; the desktop board fixture stays. */
body.previewing .tcPanel:not([data-mode=dock]),body.inspecting .tcPanel:not([data-mode=dock]),body.planning .tcPanel:not([data-mode=dock]),body.previewing .tcFab,body.inspecting .tcFab,body.planning .tcFab,body.previewing .tcFxLayer,body.inspecting .tcFxLayer,body.planning .tcFxLayer,body.previewing .tcScrim,body.inspecting .tcScrim,body.planning .tcScrim{visibility:hidden!important}
body:not(.playing) .tcPanel,body:not(.playing) .tcFab,body:not(.playing) .tcScrim,body:not(.playing) .tcFxLayer{display:none!important}
body.meta-open .tcFab,body.meta-open .tcPanel,body.meta-open .tcScrim,body.meta-open .tcFxLayer{display:none!important}
@media(prefers-reduced-motion:reduce){.tcPanel,.tcTray,.tcBubble,.tcTurn,.tcChip.play *{animation:none!important;transition:none!important}}
html.exchangeReducedUI .tcPanel,html.exchangeReducedUI .tcTray,html.exchangeReducedUI .tcBubble,html.exchangeReducedUI .tcTurn,html.exchangeReducedUI .tcChip.play *{animation:none!important;transition:none!important}

/* Build64: even a landscape keyboard leaves a full 44px gesture row reachable. */
.tcPanel.tcTight[data-mode] .tcEmote{min-height:44px;gap:1px;padding:3px 2px}
.tcPanel.tcTight[data-mode] .tcEmote .tcMark{width:20px;height:20px}
.tcPanel.tcTight[data-mode] .tcBody{padding-bottom:4px}
.tcPanel.tcTight[data-tray="1"] .tcLog{display:none}

/* Build 76: compact communication lives behind the existing character portrait.
   The wide desktop dock retains its original geometry and content. */
.tcTabs[hidden],.tcReactions[hidden],.tcBody[hidden],.tcCounter[hidden],.tcSpeechUnread[hidden]{display:none!important}
.tcTabs{display:flex;flex:none;gap:4px;padding:3px 10px;border-bottom:1px solid rgba(210,180,104,.25)}
.tcTab{flex:1;min-width:0;min-height:44px;border:0;border-radius:4px;background:transparent;color:var(--tc-muted);font:800 12px Barlow;letter-spacing:.08em;cursor:pointer}
.tcTab[aria-pressed=true]{background:rgba(210,180,104,.13);color:var(--tc-brass-hi);box-shadow:inset 0 -2px var(--tc-brass)}
.tcReactions{flex:1;min-height:0;overflow:auto;overscroll-behavior:contain;padding:4px 8px 10px}
#reactionMenu.tcEmbedded{display:block;position:static;width:100%;max-height:none!important;overflow:visible!important;margin:0;padding:6px;border:0;border-radius:0;background:none;box-shadow:none;backdrop-filter:none;animation:none;transform:none}
.tcCounter{flex:none;text-align:right;font:500 11px/1.2 Barlow;color:var(--tc-muted);margin-top:3px}
.tcSpeechUnread{position:absolute;right:-4px;bottom:-4px;z-index:6;min-width:19px;height:19px;padding:0 4px;border:1px solid #705522;border-radius:10px;background:#e8c87a;color:#14251d;font:800 11px/17px Barlow;text-align:center;pointer-events:none}
.reactionBubble.playerChat{pointer-events:none;font-size:14px;max-width:min(280px,calc(100vw - 16px))}
.reactionBubble.playerChat>span{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;overflow-wrap:anywhere}
.reactionBubble.playerChat>b{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.tcPanel:not([data-mode=dock]) .tcIcon,.tcPanel:not([data-mode=dock]) .tcTurn,.tcPanel:not([data-mode=dock]) .tcAskB{min-height:44px}
.tcPanel:not([data-mode=dock]) .tcJump{min-height:44px;bottom:80px}
.tcPanel:not([data-mode=dock]) button.tcWho{min-width:44px;min-height:44px}
#reactionMenu.tcEmbedded .rxMode{min-height:44px;font-size:11px}
#reactionMenu.tcEmbedded .rxMode::before{inset:0}
.tcPanel[data-mode=drawer]{width:min(420px,70vw)}
.tcPanel.tcTight .tcGrip{display:none}
.tcPanel.tcTight .tcHead{padding-left:8px;gap:2px}
.tcPanel.tcTight .tcTitleText{font-size:12px;letter-spacing:.02em}
.tcPanel.tcTight .tcTabs{padding-top:0;padding-bottom:0}
.tcPanel.tcTight[data-tray="1"] .tcTabs,.tcPanel.tcTight[data-tray="1"] .tcCounter{display:none}
body.previewing .playerChat,body.inspecting .playerChat,body.planning .playerChat,body.meta-open .playerChat,body:not(.playing) .playerChat{display:none!important}

/* Build165: on-demand desktop history; compact styles above are unchanged. */
.tcPanel[data-mode=dock]{transition:none;background:#071b16;border:1px solid rgba(201,162,75,.44);border-radius:6px;box-shadow:0 10px 28px #0008}
.tcPanel[data-mode=dock] .tcHead{background:linear-gradient(180deg,rgba(201,162,75,.09),transparent);border-bottom-color:rgba(201,162,75,.18)}
.tcPanel[data-mode=dock][data-open="0"] .tcBody{display:none}
.tcPanel[data-mode=dock][data-open="0"] .tcHead{height:32px}
.tcPanel[data-mode=dock] .tcHead{padding-left:8px;gap:3px}
.tcPanel[data-mode=dock] .tcTitle{font-size:12px;gap:5px;letter-spacing:.04em}
.tcPanel[data-mode=dock] .tcTurn{display:none}
.tcPanel[data-mode=dock] .tcTray{grid-template-columns:repeat(4,minmax(0,1fr));overflow-y:auto;min-height:0}
/* Ceremonies, Reports and action history never hide this fixture or disable its composer. */
