/* FedM8 Room (owner direction 2026-10-16; r03, r17, r19): one room, one look.
   Approved visual contract (DESIGN.md): paper #fffef9, canvas #f5f3ec, olive #526547, thin muted
   green lines, dark green text, plain sans-serif controls. Phone targets are 44px. */
.fr-room, .fr-dialog, .fr-menu, .fr-hidden, .fr-actions, .fr-headsup, .fr-refusal, .fr-pillbar, .fr-toast {
  --fr-paper:#fffef9; --fr-canvas:#f5f3ec; --fr-olive:#526547; --fr-olive-dark:#344b2c; --fr-ink:#29372e;
  --fr-muted:#586653; --fr-line:#d9ded0; --fr-soft:#eef1e7; --fr-amber:#fbf3dc; --fr-amber-line:#e3cf94; --fr-amber-ink:#5c4708;
  --fr-red:#8f2d22; --fr-red-soft:#fbecea;
}
.fr-room { color:var(--fr-ink); font-size:14px; line-height:1.55; overflow-wrap:anywhere; min-width:0; }
.fr-room *, .fr-dialog *, .fr-menu * { box-sizing:border-box; }
.fr-room :is(h3,p) { margin:0; }
.fr-banner { margin:0 0 10px !important; padding:8px 10px; border-radius:6px; background:var(--fr-soft); color:var(--fr-muted); font-size:12.5px; }
.fr-head { display:grid; gap:4px; margin-bottom:10px; }
.fr-chip { justify-self:start; display:inline-flex; align-items:center; min-height:22px; padding:2px 9px; border:1px solid var(--fr-line); border-radius:999px; background:var(--fr-soft); color:var(--fr-olive-dark); font-size:11.5px; font-weight:600; }
.fr-chip-grant { background:#e9f4ea; } .fr-chip-code { background:#f6efdc; }
.fr-title { font-family:"Source Serif 4","Newsreader",Georgia,serif; font-size:19px; font-weight:600; line-height:1.3; }
.fr-sub { color:var(--fr-muted); font-size:12.5px; }
.fr-tabs { display:flex; gap:4px; flex-wrap:wrap; margin:4px 0 10px; padding-bottom:8px; border-bottom:1px solid var(--fr-line); }
.fr-tab { min-height:36px; padding:6px 12px; border:1px solid transparent; border-radius:6px; background:none; color:var(--fr-muted); font:inherit; font-size:13px; cursor:pointer; }
.fr-tab[aria-selected="true"] { background:var(--fr-soft); border-color:var(--fr-line); color:var(--fr-olive-dark); font-weight:600; }
.fr-tab:hover { color:var(--fr-olive-dark); }
.fr-body { display:grid; gap:10px; min-width:0; }
.fr-post { min-width:0; padding:12px; border:1px solid var(--fr-line); border-radius:6px; background:var(--fr-paper); }
.fr-post.mine { background:#fbfcf6; }
.fr-post.held { border-style:dashed; }
.fr-branch { margin:10px 0 0 6px; padding-left:12px; border-left:2px solid var(--fr-line); display:grid; gap:8px; }
.fr-branch > summary { cursor:pointer; color:var(--fr-olive-dark); font-size:12.5px; min-height:32px; padding:6px 0; }
.fr-branch .fr-post { padding:10px; background:#fdfdf8; }
/* The shared room also carries the old commons-* class names (for older hooks); its own look wins. */
.fr-room .fr-post.commons-post { padding:12px; border:1px solid var(--fr-line); }
.fr-room .fr-branch.commons-branch { margin:10px 0 0 6px; padding-left:12px; border-left:2px solid var(--fr-line); }
.fr-room .fr-branch.commons-branch .fr-post.commons-post { padding:10px; }
.fr-room .fr-branch.commons-branch > summary { display:list-item; min-height:32px; padding:6px 0; color:var(--fr-olive-dark); }
.fr-ai { background:#fbf7e9; border-color:#eadfb8; }
.fr-author { display:flex; align-items:flex-start; gap:9px; margin-bottom:6px; min-width:0; }
.fr-avatar { display:inline-flex; align-items:center; justify-content:center; flex:0 0 30px; width:30px; height:30px; border-radius:50%; border:0; background:var(--fr-soft); color:var(--fr-olive-dark); font:600 11px/1 "DM Sans",system-ui,sans-serif; cursor:default; }
button.fr-avatar { cursor:pointer; }
.fr-avatar-ai { background:#efe2b5; color:#5c4708; }
.fr-who { display:flex; flex-wrap:wrap; align-items:center; gap:4px 8px; min-width:0; }
.fr-name { border:0; background:none; padding:0; min-height:24px; color:var(--fr-olive-dark); font:inherit; font-size:13px; font-weight:600; cursor:pointer; text-align:left; }
button.fr-name:hover { text-decoration:underline; }
strong.fr-name { cursor:default; }
.fr-meta, .fr-time, .fr-pin, .fr-you { color:var(--fr-muted); font-size:11.5px; }
.fr-pin { padding:1px 7px; border-radius:999px; background:#efe2b5; color:#5c4708; font-weight:600; }
.fr-you { padding:1px 6px; border:1px solid var(--fr-line); border-radius:999px; }
.fr-coins { display:inline-flex; }
.fr-src { display:inline-block; margin-left:auto; padding:2px 8px; border:1px solid var(--fr-line); border-radius:999px; color:var(--fr-olive-dark); font-size:11.5px; line-height:1.5; text-decoration:none; white-space:nowrap; max-width:46%; overflow:hidden; text-overflow:ellipsis; }
/* FIX-3: in a narrow room (the contract page's rail) the source chip takes its own line rather than being cut.
   FIX-4 (r03): only the chip moves. The name and its badges stay beside the avatar (they shrink and wrap
   inside their own box), so a post's author row is as tall here as on the conversation page. */
.fr-compact .fr-author { flex-wrap:wrap; }
.fr-compact .fr-author > .fr-who { flex:1 1 160px; min-width:0; }
.fr-compact .fr-src { max-width:100%; }
a.fr-src:hover { background:var(--fr-soft); }
.fr-text { white-space:pre-wrap; font-size:13.5px; }
.fr-subject { font-weight:600; font-size:13.5px; }
.fr-ctx, .fr-held { color:var(--fr-muted); font-size:12px; }
.fr-actions { display:flex; flex-wrap:wrap; align-items:center; gap:4px 10px; margin-top:6px; }
.fr-act { display:inline-flex; align-items:center; min-height:32px; padding:4px 8px; border:1px solid transparent; border-radius:6px; background:none; color:var(--fr-olive-dark); font:inherit; font-size:12.5px; cursor:pointer; }
.fr-act:hover { background:var(--fr-soft); }
.fr-act:disabled { opacity:.6; cursor:default; }
.fr-helpful[aria-pressed="true"] { background:#e8eedf; border-color:#c9d4bb; font-weight:600; }
.fr-more { min-width:36px; justify-content:center; font-size:16px; letter-spacing:1px; }
.fr-count { color:var(--fr-muted); font-size:12px; }
.fr-empty, .fr-loading, .fr-gate { color:var(--fr-muted); font-size:13px; padding:4px 0; }
.fr-fail { display:flex; flex-wrap:wrap; align-items:center; gap:8px 12px; padding:10px 12px; border:1px solid var(--fr-line); border-radius:6px; background:var(--fr-paper); }
.fr-fail-line { color:var(--fr-ink); font-size:13px; }
/* composer */
.fr-compose-host { margin-top:12px; }
.fr-compose { display:grid; gap:8px; margin:0; padding:12px; border:1px solid var(--fr-line); border-radius:6px; background:var(--fr-paper); }
.fr-reply-form { margin-top:8px; background:#fdfdf8; }
.fr-rules { color:var(--fr-muted); font-size:12.5px; }
.fr-label { display:grid; gap:6px; color:var(--fr-muted); font-size:12px; }
.fr-input { width:100%; min-height:72px; padding:9px 10px; border:1px solid #c9d1bd; border-radius:6px; background:#fff; color:var(--fr-ink); font:inherit; font-size:15px; line-height:1.5; resize:vertical; }
.fr-input:focus-visible, .fr-room :focus-visible, .fr-dialog :focus-visible, .fr-menu :focus-visible, .fr-hidden :focus-visible { outline:2px solid var(--fr-olive); outline-offset:2px; }
.fr-hint { color:var(--fr-muted); font-size:12px; }
.fr-notsent { color:var(--fr-muted); font-size:12px; font-style:italic; }
.fr-check { display:flex; align-items:flex-start; gap:8px; font-size:12.5px; color:var(--fr-ink); }
.fr-check input { flex-shrink:0; margin-top:3px; accent-color:var(--olive, #526547); }
.fr-cap { font-size:12px; }
.fr-compose-row { display:flex; flex-wrap:wrap; align-items:center; gap:8px; justify-content:flex-end; }
.fr-dest { margin-right:auto; color:var(--fr-muted); font-size:12px; }
.fr-btn { display:inline-flex; align-items:center; justify-content:center; min-height:36px; padding:6px 14px; border:1px solid var(--fr-line); border-radius:6px; background:var(--fr-paper); color:var(--fr-olive-dark); font:inherit; font-size:13px; font-weight:600; cursor:pointer; }
.fr-btn.primary { background:var(--fr-olive); border-color:var(--fr-olive); color:#fff; }
.fr-btn.primary:hover { background:var(--fr-olive-dark); }
.fr-btn.ghost { background:none; }
.fr-btn.danger { background:var(--fr-red); border-color:var(--fr-red); color:#fff; }
.fr-btn:disabled { opacity:.6; cursor:default; }
.fr-err { color:var(--fr-red); font-size:12.5px; }
/* heads-up and refusal */
.fr-headsup, .fr-refusal { display:flex; gap:10px; align-items:flex-start; padding:10px 12px; border:1px solid var(--fr-amber-line); border-radius:6px; background:var(--fr-amber); color:var(--fr-amber-ink); }
.fr-refusal { border-color:#e2b8b2; background:var(--fr-red-soft); color:#6d231b; }
.fr-headsup[hidden] { display:none; }
.fr-hu-icon { flex:0 0 20px; width:20px; height:20px; border:1.5px solid currentColor; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; font:700 12px/1 "DM Sans",system-ui,sans-serif; margin-top:1px; }
.fr-hu-main { display:grid; gap:6px; min-width:0; }
.fr-hu-text { margin:0; font-size:13px; line-height:1.5; }
.fr-hu-acts { display:flex; gap:6px; }
.fr-hu-acts .fr-act { min-height:30px; border-color:currentColor; background:#fffdf5; color:inherit; padding:2px 10px; }
.fr-hu-whytext { margin:0; font-size:12.5px; }
.fr-status:empty { display:none; }
/* new posts pill */
/* The bar sticks under the site header while the room scrolls, so a reader halfway down sees it. */
.fr-pillhost:empty { display:none; }
.fr-pillhost, .fr-pillbar { position:sticky; top:76px; z-index:3; pointer-events:none; }
.fr-pillbar { display:flex; justify-content:center; }
.fr-pillbar:has(> .fr-pill[hidden]) { display:none; }
.fr-pill { pointer-events:auto; display:inline-flex; align-items:center; min-height:34px; margin:0 0 8px; padding:6px 16px; border:0; border-radius:999px; background:var(--fr-olive); color:#fff; font:inherit; font-size:13px; font-weight:600; box-shadow:0 2px 6px #29372e33; cursor:pointer; }
.fr-pill[hidden] { display:none; }
/* menu: popover, or a bottom sheet on a phone */
.fr-menu-layer { position:absolute; inset:0 auto auto 0; width:0; height:0; z-index:10050; }
.fr-menu { position:absolute; min-width:200px; max-width:260px; display:grid; padding:6px; border:1px solid var(--fr-line); border-radius:8px; background:var(--fr-paper); box-shadow:0 8px 24px #29372e2e; z-index:10051; }
.fr-menu-item { display:flex; align-items:center; justify-content:space-between; gap:12px; width:100%; min-height:40px; padding:8px 12px; border:0; border-radius:5px; background:none; color:var(--fr-ink); font:inherit; font-size:13.5px; text-align:left; cursor:pointer; }
.fr-menu-item:hover, .fr-menu-item:focus-visible { background:var(--fr-soft); }
.fr-menu-item.danger { color:var(--fr-red); }
.fr-menu-hint { color:var(--fr-muted); font-size:11.5px; }
.fr-menu-foot { margin:4px 0 0; padding:8px 12px 4px; border-top:1px solid var(--fr-line); font-size:12.5px; }
.fr-menu-link { color:var(--fr-olive-dark); font-weight:600; }
.fr-scrim { position:fixed; inset:0; z-index:10060; display:flex; align-items:center; justify-content:center; padding:16px; background:#1d2a2140; }
.fr-menu-scrim { align-items:flex-end; padding:0; }
.fr-sheet { position:relative !important; inset:auto !important; width:100%; max-width:none; border-radius:14px 14px 0 0 !important; padding:10px 14px calc(16px + env(safe-area-inset-bottom)) !important; }
.fr-sheet-grip { justify-self:center; width:40px; height:4px; margin:2px 0 8px; border-radius:2px; background:var(--fr-line); }
.fr-menu.fr-sheet .fr-menu-item { min-height:48px; font-size:15px; }
/* dialog */
.fr-dialog { width:min(460px,100%); max-height:calc(100vh - 32px); overflow:auto; display:grid; gap:12px; padding:20px; border:1px solid var(--fr-line); border-radius:10px; background:var(--fr-paper); color:var(--fr-ink); box-shadow:0 12px 40px #29372e40; font-size:14px; }
.fr-scrim > .fr-dialog.fr-sheet { align-self:flex-end; }
.fr-dialog-title { margin:0; font-family:"Source Serif 4","Newsreader",Georgia,serif; font-size:20px; font-weight:600; }
.fr-dialog-body { display:grid; gap:10px; }
.fr-dialog-text, .fr-note { margin:0; color:var(--fr-muted); font-size:13px; }
.fr-dialog-foot { display:flex; justify-content:flex-end; gap:8px; flex-wrap:wrap; }
.fr-reasons { display:grid; gap:4px; margin:0; padding:0; border:0; }
.fr-reasons legend { margin-bottom:6px; font-weight:600; font-size:13.5px; }
.fr-reasons .fr-check { min-height:36px; align-items:center; font-size:13.5px; }
.fr-field { display:grid; gap:6px; font-size:12.5px; color:var(--fr-muted); }
.fr-field textarea { width:100%; padding:8px 10px; border:1px solid #c9d1bd; border-radius:6px; font:inherit; font-size:15px; }
/* People you hid */
.fr-hidden { display:grid; gap:8px; margin-top:18px; padding:16px; border:1px solid var(--fr-line); border-radius:8px; background:var(--fr-paper); }
.fr-hidden-title { margin:0; font-family:"Source Serif 4","Newsreader",Georgia,serif; font-size:19px; font-weight:600; color:var(--fr-ink); }
.fr-hidden-list { display:grid; gap:6px; margin:0; padding:0; list-style:none; }
.fr-hidden-row { display:flex; flex-wrap:wrap; align-items:center; gap:6px 12px; padding:8px 0; border-top:1px solid var(--fr-line); }
.fr-hidden-name { font-weight:600; color:var(--fr-ink); }
.fr-hidden-row .fr-btn { margin-left:auto; }
/* toast when the shell has none */
.fr-toast { position:fixed; left:50%; bottom:24px; transform:translateX(-50%); z-index:10070; max-width:min(520px,calc(100% - 32px)); padding:10px 16px; border-radius:8px; background:var(--fr-olive-dark); color:#fff; font-size:13.5px; box-shadow:0 6px 20px #29372e40; }
.fr-toast[hidden] { display:none; }
@media (max-width:760px) {
  .fr-act, .fr-tab, .fr-btn, .fr-branch > summary, .fr-name, .fr-hu-acts .fr-act, .fr-pill { min-height:44px; }
  .fr-more { min-width:44px; }
  .fr-post, .fr-room .fr-post.commons-post { padding:10px; }
  .fr-room .fr-branch.commons-branch { margin-left:2px; padding-left:8px; }
  .fr-room .fr-branch.commons-branch > summary { min-height:44px; }
  .fr-branch { margin-left:2px; padding-left:8px; }
  .fr-src { max-width:100%; margin-left:0; }
  /* FIX-4 (r18): the rail's source chip is a 44px tap target. The pill is drawn behind the link; the
     negative margin keeps the row as tall as before. */
  a.fr-src { position:relative; isolation:isolate; padding-block:2px; line-height:40px; margin-block:-10.5px; border-color:transparent; background:none; vertical-align:middle; }
  a.fr-src::before { content:""; position:absolute; inset:10.5px 0; border:1px solid var(--fr-line); border-radius:999px; background:#fffef9; z-index:-1; pointer-events:none; }
  a.fr-src:hover::before { background:var(--fr-soft); }
  .fr-compose-row { justify-content:stretch; }
  .fr-compose-row .fr-send { flex:1 1 auto; }
  .fr-dest { flex:1 1 100%; }
  .fr-reasons .fr-check { min-height:44px; }
  /* The acknowledgment above the box: a 44px tap row on phones (WP9 verifier fix). */
  .fr-compose .fr-check, .fr-compose .commons-check { min-height:44px; align-items:center; }
  .fr-compose .fr-check input { margin-top:0; }
  /* Profile taps: 44px hit areas that win over .chat-author .chat-button and .chat-avatar (WP5 verifier fix).
     The avatar keeps its 30px circle; the extra is transparent padding. */
  .fr-room .fr-author button.fr-name, .fr-author button.fr-name.chat-button { min-height:44px; display:inline-flex; align-items:center; }
  .fr-room .fr-author button.fr-avatar, .fr-author button.fr-avatar.chat-avatar { box-sizing:border-box; flex:0 0 44px; width:44px; height:44px; min-width:44px; min-height:44px; padding:7px; background-clip:content-box; }
}
/* r08: the server-set label, "Founding crew" or "Staff". Never typed by the poster. */
.fr-crew { display:inline-flex; align-items:center; padding:1px 8px; border-radius:999px; border:1px solid var(--fr-olive, #526547); color:var(--fr-olive-dark, #344b2c); background:#eef2e6; font-size:11.5px; font-weight:650; line-height:1.5; white-space:nowrap; }
.fr-weekly .fr-pin { background:#e6ecda; color:#344b2c; }
/* r09: the public-name switch on My Profile */
.fr-public-name .fr-public-check { display:flex; align-items:flex-start; gap:8px; min-height:36px; font-size:14px; color:var(--fr-ink, #1f2d24); }
.fr-public-name .fr-public-check input { margin-top:3px; accent-color:var(--fr-olive, #526547); width:18px; height:18px; flex:none; }
@media (max-width:760px) { .fr-public-name .fr-public-check { min-height:44px; } }

/* r10: "You follow this thread because you posted it." once, above the box after a post. */
.fr-follow-note { margin:0 0 8px !important; padding:6px 10px; border-left:3px solid var(--fr-olive, #526547); background:#f4f6ee; color:var(--fr-muted, #586653); font-size:12.5px; }
.fr-actions .tf-wrap { display:inline-flex; }

/* r16: host cards. "FedM8 AI" (or "FedM8 team" for staff office hours) on paper with an olive edge;
   never an avatar of a person. The strip names only what this room has this week; today is marked. */
.fr-hostbox { --fr-paper:#fffef9; --fr-canvas:#f5f3ec; --fr-olive:#526547; --fr-olive-dark:#344b2c; --fr-ink:#29372e; --fr-muted:#586653; --fr-line:#d9ded0; --fr-soft:#eef1e7;
  display:grid; gap:8px; min-width:0; color:var(--fr-ink); font-size:14px; line-height:1.5; }
.fr-hostbox * { box-sizing:border-box; }
.fr-hostbox p, .fr-hostbox ul, .fr-hostbox ol { margin:0; }
.fr-strip { display:grid; grid-template-columns:repeat(auto-fit,minmax(118px,1fr)); gap:6px; padding:0; list-style:none; }
.fr-strip-day a { display:flex; flex-direction:column; gap:1px; min-height:44px; padding:6px 10px; border:1px solid var(--fr-line); border-radius:6px; background:var(--fr-paper); color:var(--fr-ink); text-decoration:none; }
.fr-strip-day.on a { background:#eef2e6; border-color:var(--fr-olive); }
.fr-strip-dow { font-size:11px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--fr-olive-dark); }
.fr-strip-what { font-size:13px; }
.fr-strip-day a:focus-visible, .fr-host a:focus-visible, .fr-catchup a:focus-visible { outline:2px solid var(--fr-olive); outline-offset:2px; }
.fr-host { min-width:0; padding:12px 14px; border:1px solid var(--fr-line); border-left:3px solid var(--fr-olive); border-radius:6px; background:var(--fr-paper); }
.fr-host-head { display:flex; flex-wrap:wrap; align-items:center; gap:4px 8px; margin-bottom:6px !important; font-size:12px; color:var(--fr-muted); }
.fr-host-chip { display:inline-flex; align-items:center; min-height:20px; padding:1px 8px; border-radius:4px; background:var(--fr-olive-dark); color:#fffef9; font-size:11.5px; font-weight:700; white-space:nowrap; }
.fr-host-chip.team { background:#5c4708; }
.fr-host-body { color:var(--fr-ink); }
.fr-host-body.lead { font-size:15.5px; font-weight:650; line-height:1.4; }
.fr-host-when { font-weight:650; color:var(--fr-olive-dark); margin-bottom:2px !important; }
.fr-host-links { display:grid; gap:0; margin-top:8px !important; padding:0; list-style:none; }
.fr-host-links li { display:flex; flex-wrap:wrap; align-items:baseline; gap:2px 8px; padding:7px 0; border-top:1px solid var(--fr-line); font-size:13.5px; }
.fr-host-links li:first-child { border-top:0; }
.fr-host-links a { color:var(--fr-olive-dark); font-weight:600; }
.fr-host-meta { display:inline-flex; padding:1px 8px; border-radius:999px; background:#f6efdc; color:#5c4708; font-size:11.5px; font-weight:650; white-space:nowrap; }
.fr-host-meta.grant { background:#e9f4ea; color:#344b2c; }
.fr-host-rest { color:var(--fr-muted); font-size:12.5px; }
.fr-host-src, .fr-host-note { margin-top:8px !important; padding-top:6px; border-top:1px solid var(--fr-line); color:var(--fr-muted); font-size:12px; }
.fr-host-note { border-top:0; padding-top:0; margin-top:4px !important; }
.fr-host-drop { display:flex; flex-wrap:wrap; align-items:center; gap:4px 10px; padding:8px 12px; border:1px dashed var(--fr-line); border-left:1px dashed var(--fr-line); border-radius:6px; background:var(--fr-canvas); font-size:13.5px; }
.fr-host-dropt { font-weight:600; }
.fr-host-droplink { color:var(--fr-olive-dark); font-size:13px; }
/* r16: "Catch up" on a long thread; "Waiting on an answer" on a waiting question. */
.fr-catchup { margin:2px 0 8px; padding:8px 10px; border:1px solid var(--fr-line); border-radius:6px; background:var(--fr-canvas, #f5f3ec); font-size:13.5px; }
.fr-catchup-link { display:inline-flex; align-items:center; min-height:32px; margin-top:2px; color:var(--fr-olive-dark, #344b2c); font-weight:600; }
.fr-catchup-meta { margin-top:2px !important; color:var(--fr-muted, #586653); font-size:12px; }
.fr-waiting { display:inline-flex; padding:1px 8px; border-radius:999px; background:#fbf3dc; color:#5c4708; font-size:11.5px; font-weight:650; white-space:nowrap; }
/* r13: the pinned rule of a certification room, and a chip only from SAM data for a verified UEI. */
.fr-certrule { background:var(--fr-canvas, #f5f3ec); border-left:3px solid var(--fr-olive, #526547); font-size:13.5px; }
.fr-sam { display:inline-flex; align-items:center; padding:1px 8px; border-radius:999px; background:#e3f0e3; color:#22502a; font-size:11.5px; font-weight:650; white-space:nowrap; }
@media (max-width:760px) {
  .fr-strip { grid-template-columns:1fr 1fr; }
  .fr-host-links li { padding:9px 0; }
  .fr-host-links a, .fr-host-droplink, .fr-catchup-link { display:inline-flex; align-items:center; min-height:44px; }
}
/* x01 (owner direction 2026-10-16): a full-page room on a phone keeps its box pinned above the dock with
   safe-area padding and a 44px Post. Folded, it is one line: the rules, the box and Post. */
@media (max-width:760px) {
  .fr-room.fr-sticky > .fr-compose-host:has(> form.fr-compose) { position:fixed; left:0; right:0; bottom:calc(78px + env(safe-area-inset-bottom)); z-index:80; margin:0; padding:8px 12px 10px; background:var(--fr-paper); border-top:1px solid var(--fr-line); box-shadow:0 -4px 14px #29372e14; }
  /* The page ends with room to scroll the last post clear of the pinned box. */
  body:has(.fr-room.fr-sticky > .fr-compose-host > form.fr-compose) #page-content { padding-bottom:180px !important; }
  .fr-room.fr-sticky > .fr-compose-host:has(> form.fr-compose) > .fr-rules { font-size:12px; margin-bottom:6px; }
  /* Folded, the rules line keeps two lines; the whole line shows while you write. */
  .fr-room.fr-sticky > .fr-compose-host:has(> form.fr-compose):not(.fr-open) > .fr-rules { display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; overflow:hidden; }
  /* FIX-1: a folded box that still holds words says so in one short line. */
  .fr-room.fr-sticky > .fr-compose-host.fr-has-draft:not(.fr-open) > form.fr-compose > .fr-notsent { display:block; grid-column:1 / -1; order:9; margin:0; font-size:12px; }
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) > form.fr-compose { border:0 !important; padding:0 !important; background:transparent !important; box-shadow:none !important; }
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) > form.fr-compose > .fd-chat-actions { grid-column:2; margin:0; padding:0; border:0; }
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) .fd-chat-emoji-actions,
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) > form.fr-compose > .fr-compose-row:not(:has(.fr-send)) { display:none; }
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) > form.fr-compose { display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:end; gap:8px; margin:0; }
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) > form.fr-compose > * { grid-column:1 / -1; }
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) > form.fr-compose > .fr-label { grid-column:1; font-size:0; }
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) > form.fr-compose > .fr-compose-row { grid-column:2; margin:0; }
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) > form.fr-compose > :is(.fr-check,.fr-cap,.tm-chips-wrap,.fr-hint,.fr-notsent) { display:none; }
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) .fr-dest { display:none; }
  /* FIX-8: one line while empty; the box grows with a kept draft (fedm8-room.js autoGrow sets the height), up to
     four in ten of the screen, then scrolls, so a refused draft is there to read whole. */
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) .fr-input { min-height:44px; height:44px; max-height:40vh; margin-top:0; resize:none; font-size:16px; line-height:22px; }
  .fr-room.fr-sticky > .fr-compose-host:not(.fr-open) :is(.fr-send,.fd-chat-send) { min-height:44px; min-width:64px; }
  .fr-room.fr-sticky > .fr-compose-host.fr-open > form.fr-compose { max-height:52vh; overflow:auto; }
  .fr-room.fr-sticky > .fr-compose-host .fr-input { max-height:40vh; }
}
/* FIX-2 (2026-10-17): explicit ink. A host page's chat tokens (the legacy dark scheme among them) never
   repaint a room's titles or names: the approved design is light-only. */
.fr-room, .fr-room :is(h1,h2,h3,h4), .fr-room .fr-title { color:var(--fr-ink); }
.fr-room .fr-author button.fr-name, .fr-room button.fr-name.chat-button { color:var(--fr-olive-dark); }
/* FIX-4 (x03): the room's radios and checkboxes (Share this line, the acknowledgment) use the olive control colour. */
.fr-room input[type="radio"], .fr-room input[type="checkbox"], .fr-dialog input[type="radio"], .fr-dialog input[type="checkbox"] { accent-color:var(--fr-olive, #526547); }
