
/* STEVE BOSTON ACCESS — NETWORK DOCK */
.access-network-dock{
  position:fixed;
  right:18px;
  bottom:0;
  width:min(390px,calc(100vw - 20px));
  z-index:9998;
  font-family:'DM Sans',Arial,sans-serif;
  color:#151515;
  display:none;
}
.access-network-dock.is-visible{display:block}
.access-network-dock-card{
  background:#fff;
  border:1px solid #d6d2c7;
  border-bottom:0;
  box-shadow:0 -10px 35px rgba(0,0,0,.22);
  border-radius:10px 10px 0 0;
  overflow:hidden;
}
.access-network-dock-head{
  height:48px;
  background:#0d0d0f;
  color:#fff;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:10px;
  padding:0 12px 0 14px;
  cursor:pointer;
}
.access-network-dock-title{
  min-width:0;
  display:flex;
  align-items:center;
  gap:8px;
  font-family:'Space Mono',monospace;
  font-size:.66rem;
  font-weight:700;
  letter-spacing:.08em;
  text-transform:uppercase;
}
.access-network-dock-title strong{
  color:#c9a84c;
  white-space:nowrap;
}
.access-network-dock-unread{
  min-width:19px;
  height:19px;
  border-radius:999px;
  padding:0 5px;
  background:#b51f25;
  color:#fff;
  display:none;
  align-items:center;
  justify-content:center;
  font:700 9px 'Space Mono',monospace;
}
.access-network-dock-unread.show{display:inline-flex}
.access-network-dock-controls{display:flex;align-items:center;gap:2px}
.access-network-dock-controls button{
  width:32px;height:32px;border:0;background:transparent;color:#bdbdbd;
  cursor:pointer;font-size:18px;line-height:1;border-radius:4px;
}
.access-network-dock-controls button:hover{background:#1d1d20;color:#fff}
.access-network-dock-body{height:520px;display:flex;flex-direction:column;background:#fff}
.access-network-dock.minimized .access-network-dock-body{display:none}
.access-network-dock.minimized{width:min(330px,calc(100vw - 20px))}
.access-network-dock.minimized .access-network-dock-head{border-radius:10px 10px 0 0}
.access-network-dock-inbox{
  max-height:145px;
  overflow:auto;
  border-bottom:1px solid #e3e3e3;
  background:#fafafa;
}
.access-network-dock-person{
  display:flex;align-items:center;gap:8px;padding:9px 11px;border-bottom:1px solid #ececec;
  cursor:pointer;
}
.access-network-dock-person:last-child{border-bottom:0}
.access-network-dock-person.active{background:#f4efe3}
.access-network-dock-avatar{
  width:34px;height:34px;border-radius:50%;object-fit:cover;background:#ddd;flex:0 0 34px;
}
.access-network-dock-copy{min-width:0;flex:1}
.access-network-dock-name{font-size:12px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.access-network-dock-preview{font-size:10px;color:#777;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.access-network-dock-badge{
  min-width:18px;height:18px;border-radius:999px;background:#b51f25;color:#fff;
  display:flex;align-items:center;justify-content:center;padding:0 5px;font:700 8px 'Space Mono',monospace;
}
.access-network-dock-thread-head{
  padding:10px 12px;border-bottom:1px solid #e5e5e5;background:#fff;display:flex;justify-content:space-between;align-items:center;gap:8px
}
.access-network-dock-thread-name{font-weight:700;font-size:13px}
.access-network-dock-thread-handle{font:9px 'Space Mono',monospace;color:#888;margin-top:2px}
.access-network-dock-openfull{
  text-decoration:none;color:#9a1e1e;font:700 9px 'Space Mono',monospace;letter-spacing:.04em
}
.access-network-dock-thread{
  flex:1;overflow:auto;padding:11px;background:#f7f7f6;
}
.access-network-dock-empty{
  height:100%;display:grid;place-items:center;text-align:center;color:#888;font-size:12px;padding:18px
}
.access-network-dock-msg{margin:7px 0}
.access-network-dock-bubble{
  display:table;max-width:78%;background:#fff;border:1px solid #ddd;padding:8px 10px;
  font-size:12px;line-height:1.4;border-radius:9px
}
.access-network-dock-msg.mine .access-network-dock-bubble{
  margin-left:auto;background:#171719;color:#fff;border-color:#171719
}
.access-network-dock-meta{font:7px 'Space Mono',monospace;opacity:.5;margin-top:4px}
.access-network-dock-msg.mine .access-network-dock-meta{text-align:right}
.access-network-dock-compose{
  display:flex;gap:7px;padding:9px;border-top:1px solid #ddd;background:#fff
}
.access-network-dock-compose textarea{
  flex:1;resize:none;min-height:42px;max-height:88px;border:1px solid #ccc;padding:9px;font:12px 'DM Sans',Arial,sans-serif
}
.access-network-dock-send{
  border:0;background:#171719;color:#fff;min-width:64px;padding:0 12px;font:700 9px 'Space Mono',monospace;cursor:pointer
}
.access-network-dock-alert{
  position:fixed;right:18px;bottom:58px;width:min(330px,calc(100vw - 20px));
  background:#171719;color:#fff;border:1px solid #3b3423;border-left:3px solid #c9a84c;
  box-shadow:0 10px 30px rgba(0,0,0,.28);padding:11px 12px;z-index:9999;display:none;cursor:pointer
}
.access-network-dock-alert.show{display:block}
.access-network-dock-alert strong{display:block;font-size:12px}
.access-network-dock-alert span{display:block;color:#bbb;font-size:10px;margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media(max-width:650px){
  .access-network-dock{right:6px;width:calc(100vw - 12px)}
  .access-network-dock.minimized{width:calc(100vw - 12px)}
  .access-network-dock-body{height:58vh;max-height:540px}
  .access-network-dock-alert{right:6px;width:calc(100vw - 12px)}
}


/* 3E.10K — iPhone dock sizing / keyboard / landscape fix */
.access-network-dock-compose textarea{
  font-size:16px; /* iOS Safari: prevents focus zoom */
}
@media(max-width:650px){
  .access-network-dock{
    left:6px;
    right:6px;
    width:auto;
    max-width:none;
  }
  .access-network-dock.minimized{
    left:auto;
    right:6px;
    width:min(310px,calc(100vw - 12px));
  }
  .access-network-dock-body{
    height:min(62dvh,520px);
    max-height:calc(100dvh - 70px);
  }
  .access-network-dock-inbox{
    max-height:128px;
    flex:0 0 auto;
  }
  .access-network-dock-thread{
    min-height:120px;
  }
  .access-network-dock-compose{
    padding-bottom:max(9px,env(safe-area-inset-bottom));
  }
  .access-network-dock-compose textarea{
    font-size:16px;
    min-height:46px;
  }
}
/* Landscape phones: keep contacts visible and chat compact above the keyboard */
@media(max-height:500px) and (orientation:landscape){
  .access-network-dock{
    left:auto;
    right:8px;
    width:min(430px,52vw);
  }
  .access-network-dock.minimized{
    width:min(310px,42vw);
  }
  .access-network-dock-body{
    height:calc(100dvh - 54px);
    max-height:none;
  }
  .access-network-dock-head{
    height:42px;
  }
  .access-network-dock-inbox{
    display:flex;
    overflow-x:auto;
    overflow-y:hidden;
    max-height:none;
    height:64px;
    flex:0 0 64px;
    background:#fafafa;
  }
  .access-network-dock-person{
    min-width:145px;
    max-width:170px;
    height:64px;
    box-sizing:border-box;
    border-right:1px solid #ececec;
    border-bottom:0;
    padding:7px 8px;
  }
  .access-network-dock-avatar{
    width:30px;height:30px;flex-basis:30px;
  }
  .access-network-dock-thread-head{
    padding:6px 9px;
    min-height:40px;
    box-sizing:border-box;
  }
  .access-network-dock-thread{
    min-height:70px;
    padding:8px;
  }
  .access-network-dock-compose{
    padding:6px;
  }
  .access-network-dock-compose textarea{
    min-height:40px;
    max-height:58px;
    font-size:16px;
    padding:8px;
  }
  .access-network-dock-send{
    min-width:58px;
  }
}

/* 3E.10L — signed-in member accent theme */
.access-network-dock{
  --network-accent:#c9a84c;
  --network-accent-soft:color-mix(in srgb,var(--network-accent) 12%,#fff);
  --network-accent-dark:color-mix(in srgb,var(--network-accent) 72%,#111);
}
.access-network-dock-card{border-color:color-mix(in srgb,var(--network-accent) 42%,#d6d2c7)}
.access-network-dock-title strong{color:var(--network-accent)}
.access-network-dock-unread,.access-network-dock-badge{background:var(--network-accent-dark)}
.access-network-dock-person.active{background:var(--network-accent-soft);box-shadow:inset 3px 0 0 var(--network-accent)}
.access-network-dock-thread-head{border-bottom-color:color-mix(in srgb,var(--network-accent) 28%,#e5e5e5)}
.access-network-dock-openfull{color:var(--network-accent-dark)}
.access-network-dock-msg.mine .access-network-dock-bubble{
  background:color-mix(in srgb,var(--network-accent) 20%,#111);
  border-color:var(--network-accent);
  box-shadow:inset 3px 0 0 var(--network-accent);
}
.access-network-dock-compose textarea:focus{outline:none;border-color:var(--network-accent);box-shadow:0 0 0 1px var(--network-accent)}
.access-network-dock-send{background:color-mix(in srgb,var(--network-accent) 18%,#111);border:1px solid var(--network-accent)}
.access-network-dock-alert{border-left-color:var(--network-accent)}

/* 3E.10M — dock message reaction picker */
.access-network-dock-bubble[data-dock-message-bubble]{cursor:pointer}
.access-network-dock-reactions{display:flex;gap:4px;flex-wrap:wrap;margin-top:3px;max-width:78%}
.access-network-dock-msg.mine .access-network-dock-reactions{margin-left:auto;justify-content:flex-end}
.access-network-dock-reaction{border:1px solid #ddd;border-radius:999px;background:#fff;padding:3px 6px;font-size:13px;line-height:1;cursor:pointer}
.access-network-dock-reaction.mine{border-color:var(--network-accent);background:var(--network-accent-soft)}
.access-network-emoji-popover{position:fixed;z-index:10060;width:292px;max-width:calc(100vw - 18px);background:#fff;border:1px solid #d7d7d7;border-radius:12px;box-shadow:0 14px 40px rgba(0,0,0,.3);padding:10px;color:#151515}
.access-network-emoji-popover[hidden]{display:none}
.access-network-emoji-search{width:100%;box-sizing:border-box;border:1px solid #d6d6d6;border-radius:7px;padding:9px 10px;font:16px 'DM Sans',sans-serif;outline:none}
.access-network-emoji-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;max-height:190px;overflow:auto;margin-top:8px}
.access-network-emoji-choice{border:0;background:transparent;border-radius:7px;min-height:34px;font-size:21px;cursor:pointer}
.access-network-emoji-choice:hover{background:#f1eee5}
.access-network-emoji-foot{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-top:8px;padding-top:7px;border-top:1px solid #eee}
.access-network-emoji-hint{font-size:9px;color:#888}.access-network-emoji-use{border:1px solid var(--network-accent);background:#fff;padding:6px 8px;font:700 9px 'Space Mono',monospace;cursor:pointer}
@media(max-width:650px){.access-network-emoji-popover{left:8px!important;right:8px!important;bottom:max(8px,env(safe-area-inset-bottom))!important;top:auto!important;width:auto}.access-network-emoji-grid{grid-template-columns:repeat(8,1fr);max-height:165px}}

/* 3E.10N — dock GIF sender */
.access-network-dock-plus{width:38px;min-width:38px;border:1px solid #ccc;background:#fff;color:#222;font-size:22px;cursor:pointer}
.access-network-dock-gif-panel{position:absolute;left:8px;right:8px;bottom:66px;background:#fff;border:1px solid #d7d7d7;border-radius:10px;box-shadow:0 12px 35px rgba(0,0,0,.25);padding:9px;z-index:30}
.access-network-dock-gif-panel[hidden]{display:none}
.access-network-dock-gif-row{display:flex;gap:6px}
.access-network-dock-gif-row input{flex:1;min-width:0;border:1px solid #ccc;padding:8px;font-size:16px}
.access-network-dock-gif-row button{border:1px solid var(--network-accent);background:#111;color:#fff;padding:0 10px;font:700 9px 'Space Mono',monospace}
.access-network-dock-gif-preview{display:none;margin-top:7px;max-height:140px;overflow:hidden;background:#f3f3f3;border-radius:7px}
.access-network-dock-gif-preview.show{display:block}
.access-network-dock-gif-preview img{display:block;width:100%;max-height:140px;object-fit:contain}
.access-network-dock-gif{display:block;max-width:230px;max-height:230px;border-radius:9px}

/* 3E.10O — built-in GIPHY browser */
.access-network-dock-gif-panel{padding:9px}
.access-network-dock-gif-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:7px}.access-network-dock-gif-title{font:700 9px 'Space Mono',monospace;letter-spacing:.08em;color:#666}.access-network-dock-gif-close{border:0;background:transparent;font-size:18px;color:#666;cursor:pointer}
.access-network-dock-gif-search{width:100%;box-sizing:border-box;border:1px solid #ccc;border-radius:7px;padding:9px;font-size:16px;outline:none}.access-network-dock-gif-search:focus{border-color:var(--network-accent)}
.access-network-dock-gif-status{font:700 8px 'Space Mono',monospace;letter-spacing:.07em;color:#888;margin:7px 2px}
.access-network-dock-gif-results{display:grid;grid-template-columns:repeat(2,1fr);gap:5px;max-height:250px;overflow:auto}.access-network-dock-gif-item{border:0;padding:0;background:#eee;border-radius:7px;overflow:hidden;cursor:pointer;min-height:72px}.access-network-dock-gif-item img{display:block;width:100%;height:100%;min-height:72px;max-height:125px;object-fit:cover}.access-network-dock-gif-empty{grid-column:1/-1;text-align:center;padding:20px 8px;color:#888;font-size:11px}.access-network-dock-giphy-credit{text-align:right;margin-top:6px;font:700 7px 'Space Mono',monospace;letter-spacing:.1em;color:#777}
@media(max-width:650px){.access-network-dock-gif-panel{position:fixed;left:8px;right:8px;bottom:max(8px,env(safe-area-inset-bottom));max-height:60dvh}.access-network-dock-gif-results{max-height:44dvh}}

/* 3E.10Q — dock message actions */
.access-network-dock-message-actions{position:fixed;z-index:10090;width:220px;max-width:calc(100vw - 18px);background:#111;color:#fff;border:1px solid #333;border-radius:11px;box-shadow:0 16px 40px rgba(0,0,0,.34);padding:6px}
.access-network-dock-message-actions[hidden]{display:none}
.access-network-dock-message-actions button{display:block;width:100%;border:0;background:transparent;color:#fff;text-align:left;padding:10px 11px;border-radius:7px;font:600 12px 'DM Sans',sans-serif;cursor:pointer}
.access-network-dock-message-actions .danger{color:#ff8d8d}
.access-network-dock-message-sep{height:1px;background:#333;margin:4px 0}
.access-network-dock-replybar{display:none;padding:7px 9px;background:var(--network-accent-soft);border-top:1px solid color-mix(in srgb,var(--network-accent) 30%,#ddd);font-size:10px;align-items:center;justify-content:space-between;gap:8px}
.access-network-dock-replybar.show{display:flex}
.access-network-dock-replybar button{border:0;background:transparent;font:700 8px 'Space Mono',monospace;cursor:pointer;color:var(--network-accent-dark)}
.access-network-dock-replyquote{font-size:9px;opacity:.62;border-left:2px solid var(--network-accent);padding-left:6px;margin-bottom:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.access-network-dock-msg.edited .access-network-dock-meta:after{content:" · EDITED"}
.access-network-dock-thread-tools{display:flex;gap:7px;align-items:center}.access-network-dock-thread-tools button{border:0;background:none;color:var(--network-accent-dark);font:700 8px 'Space Mono',monospace;cursor:pointer;padding:4px}
.access-network-dock-thread-tools button.muted{color:var(--network-accent)}
@media(max-width:650px){.access-network-dock-message-actions{left:8px!important;right:8px!important;bottom:max(8px,env(safe-area-inset-bottom))!important;top:auto!important;width:auto}}

/* 3E.10R deleted-message render */
.access-network-dock-removed-text{font-style:italic;opacity:.58}

/* 3E.10U — restore live typing indicator in persistent Network dock */
.access-network-dock-typing{
  min-height:20px;
  box-sizing:border-box;
  padding:3px 12px 5px;
  font:700 9px 'Space Mono',monospace;
  letter-spacing:.06em;
  color:var(--network-accent);
  background:#fff;
  opacity:0;
  pointer-events:none;
  transition:opacity .16s ease;
}
.access-network-dock-typing.show{opacity:1}
.access-network-dock-typing-dots i{
  display:inline-block;
  width:4px;
  height:4px;
  margin-left:3px;
  border-radius:50%;
  background:currentColor;
  animation:accessDockTypingPulse 1s infinite;
}
.access-network-dock-typing-dots i:nth-child(2){animation-delay:.15s}
.access-network-dock-typing-dots i:nth-child(3){animation-delay:.3s}
@keyframes accessDockTypingPulse{
  0%,60%,100%{opacity:.25;transform:translateY(0)}
  30%{opacity:1;transform:translateY(-2px)}
}

/* 3E.10V — dock requests + pins */
.access-network-dock-request-strip{display:flex;align-items:center;gap:7px;padding:7px 9px;background:#121212;color:#fff;border-bottom:1px solid #2d2d2d;font:700 8px 'Space Mono',monospace;letter-spacing:.05em}
.access-network-dock-request-strip[hidden]{display:none}
.access-network-dock-request-strip strong{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;border-radius:9px;background:var(--network-accent);color:#111}
.access-network-dock-request-strip span{flex:1}
.access-network-dock-request-strip button{border:1px solid #555;background:transparent;color:#fff;padding:5px 7px;font:700 8px 'Space Mono',monospace}
.access-network-dock-pinmark{color:var(--network-accent);font-size:8px}
.access-network-dock-thread-tools button.pinned{color:var(--network-accent)}
.access-network-dock-request-decision{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 9px;background:#111;color:#fff;border-top:1px solid #333;font:700 8px 'Space Mono',monospace}
.access-network-dock-request-decision[hidden]{display:none}
.access-network-dock-request-decision>div{display:flex;gap:5px}
.access-network-dock-request-decision button{border:1px solid #555;background:#191919;color:#fff;padding:6px 7px;font:700 8px 'Space Mono',monospace}
.access-network-dock-request-decision button.accept{background:var(--network-accent);border-color:var(--network-accent);color:#111}

/* 3E.10W — better search + recent multi-chat switcher */
.access-network-dock-search-wrap{padding:7px 8px 4px;background:#fff}
.access-network-dock-search{width:100%;box-sizing:border-box;border:1px solid #ddd;border-radius:7px;padding:8px 9px;font-size:16px;outline:none}
.access-network-dock-search:focus{border-color:var(--network-accent)}
.access-network-dock-recent{display:flex;gap:6px;padding:7px 8px;overflow-x:auto;background:#f7f7f7;border-bottom:1px solid #e4e4e4}
.access-network-dock-recent[hidden]{display:none}
.access-network-dock-recent-chat{position:relative;display:flex;align-items:center;gap:5px;min-width:max-content;border:1px solid #ddd;background:#fff;border-radius:18px;padding:4px 8px 4px 4px;cursor:pointer}
.access-network-dock-recent-chat.active{border-color:var(--network-accent)}
.access-network-dock-recent-chat img,.access-network-dock-recent-chat>span{width:22px;height:22px;border-radius:50%;object-fit:cover;background:#ddd}
.access-network-dock-recent-chat b{font:700 8px 'Space Mono',monospace;max-width:78px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.access-network-dock-recent-chat i{display:inline-flex;align-items:center;justify-content:center;min-width:15px;height:15px;padding:0 3px;border-radius:9px;background:#9a1e1e;color:#fff;font:700 8px 'Space Mono',monospace;font-style:normal}
.access-network-dock-badge.manual{font-size:14px;line-height:10px}
.access-network-dock-thread-tools button.marked-unread{color:var(--network-accent)}

/* 3E.10X — compact dock navigation / taller chat history */
.access-network-dock-search-results[hidden]{display:none!important}
.access-network-dock-search-results{
  position:absolute;
  left:8px;
  right:8px;
  top:auto;
  z-index:25;
  max-height:220px!important;
  overflow-y:auto;
  background:#fff;
  border:1px solid #d9d9d9;
  box-shadow:0 12px 28px rgba(0,0,0,.18);
}
.access-network-dock-search-empty{
  padding:14px;
  text-align:center;
  color:#777;
  font:700 9px 'Space Mono',monospace;
}
.access-network-dock-body{position:relative}
.access-network-dock-thread{
  flex:1 1 auto!important;
  min-height:0!important;
}
.access-network-dock-recent{
  flex:0 0 auto;
}
.access-network-dock-search-wrap{
  flex:0 0 auto;
}

/* On mobile, reclaim the space previously used by the scrolling name list. */
@media(max-width:760px){
  .access-network-dock-body{
    display:flex;
    flex-direction:column;
  }
  .access-network-dock-thread{
    flex:1 1 auto!important;
    min-height:260px!important;
    max-height:none!important;
  }
  .access-network-dock-search-results{
    top:108px;
    max-height:240px!important;
  }
}

/* 3E.10Y — removable Quick Switch chats */
.access-network-dock-recent-wrap{
  position:relative;
  flex:0 0 auto;
}
.access-network-dock-recent-wrap .access-network-dock-recent-chat{
  padding-right:23px;
}
.access-network-dock-recent-remove{
  position:absolute;
  right:3px;
  top:50%;
  transform:translateY(-50%);
  width:18px;
  height:18px;
  display:flex;
  align-items:center;
  justify-content:center;
  border:0;
  border-radius:50%;
  background:transparent;
  color:#777;
  font:700 14px/1 Arial,sans-serif;
  cursor:pointer;
  z-index:2;
}
.access-network-dock-recent-remove:hover,
.access-network-dock-recent-remove:focus{
  background:#eee;
  color:#111;
  outline:none;
}

/* 3F.1B — iOS Network dock scroll containment */
.access-network-dock,
.access-network-dock-card,
.access-network-dock-body{
  overscroll-behavior:contain;
}
.access-network-dock-thread,
.access-network-dock-search-results,
.access-network-dock-gif-results{
  overscroll-behavior-y:contain;
  -webkit-overflow-scrolling:touch;
  touch-action:pan-y;
}
.access-network-dock-recent{
  overscroll-behavior:contain;
  touch-action:pan-x;
}
.access-network-dock-head,
.access-network-dock-thread-head,
.access-network-dock-compose,
.access-network-dock-typing,
.access-network-dock-request-strip,
.access-network-dock-request-decision{
  touch-action:manipulation;
}

/* =========================================================
   PHASE 3F.2 — Network refinement
   ========================================================= */
.access-network-dock{
  transform:translateY(10px) scale(.992);
  opacity:0;
  transition:transform .18s ease,opacity .18s ease;
}
.access-network-dock.is-visible{
  transform:translateY(0) scale(1);
  opacity:1;
}
.access-network-dock-card{
  box-shadow:0 20px 60px rgba(0,0,0,.34);
}
.access-network-dock-head{
  border-bottom-color:color-mix(in srgb,var(--network-accent,#c9a84c) 48%,#222);
}
.access-network-dock-thread-head{
  padding-top:9px;padding-bottom:9px;
}
.access-network-dock-thread-name{
  font-size:14px;line-height:1.1;
}
.access-network-dock-thread-name:before{
  content:"PRIVATE CHAT";
  display:block;
  margin-bottom:3px;
  color:#8a8a90;
  font:700 6px 'Space Mono',monospace;
  letter-spacing:.16em;
}
.access-network-dock-thread{
  scroll-behavior:smooth;
}
.access-network-dock-bubble{
  border-radius:12px;
  box-shadow:0 1px 0 rgba(0,0,0,.035);
}
.access-network-dock-msg.mine .access-network-dock-bubble{
  border-bottom-right-radius:4px;
}
.access-network-dock-msg:not(.mine) .access-network-dock-bubble{
  border-bottom-left-radius:4px;
}
.access-network-dock-meta{
  letter-spacing:.025em;
}
.access-network-dock-badge{
  box-shadow:0 0 0 2px #fafafa;
}
.access-network-dock-empty:before{
  content:"↗";
  width:34px;height:34px;
  margin:0 auto 8px;
  border:1px solid #d7d7d7;
  border-radius:50%;
  display:grid;place-items:center;
  color:var(--network-accent,#9a1e1e);
  font:700 14px 'Space Mono',monospace;
}
.access-network-dock-search:focus,
.access-network-dock-compose textarea:focus{
  border-color:var(--network-accent,#9a1e1e)!important;
  outline:none;
}
@media(prefers-reduced-motion:reduce){
  .access-network-dock{transition:none}
  .access-network-dock-thread{scroll-behavior:auto}
}

/* ==========================================================
   NO SKIN EFFECTS IN NETWORK CHAT
   Scoped strictly to messaging surfaces — the dock, the inbox, Quick
   Switch, the thread and request cards. The cosmetic engines are NOT
   modified; profile rings, animated trims, Vault skins, lightning and
   atmospheric effects continue to work everywhere else exactly as
   before. This is belt-and-braces: the messaging markup no longer emits
   cosmetic hooks, and this guarantees nothing reintroduces one.
   ========================================================== */
.access-network-dock .access-profile-ring-layer,
.access-network-dock .access-canonical-trim-layer,
.access-network-dock .access-atmo-fx,
.access-network-dock .access-lightning-svg,
.access-network-dock .access-unified-skin-layer,
.access-network-dock .access-black-diamond-stones,
.access-network-dock .access-black-diamond-trim-stone,
#inbox .access-profile-ring-layer,
#inbox .access-canonical-trim-layer,
#inbox .access-atmo-fx,
#inbox .access-lightning-svg,
#inbox .access-unified-skin-layer,
#inbox .access-black-diamond-stones,
#inbox .access-black-diamond-trim-stone,
#network-quick .access-profile-ring-layer,
#network-quick .access-canonical-trim-layer,
#network-quick .access-atmo-fx,
#network-quick .access-lightning-svg,
#network-quick .access-unified-skin-layer,
#thread .access-profile-ring-layer,
#thread .access-canonical-trim-layer,
#thread .access-atmo-fx,
#thread .access-lightning-svg,
#thread .access-unified-skin-layer,
#requests .access-profile-ring-layer,
#requests .access-canonical-trim-layer,
#requests .access-atmo-fx,
#requests .access-lightning-svg,
#requests .access-unified-skin-layer{
  display:none!important;
}
/* If a trim class is ever applied inside messaging, neutralise its
   visual output without touching the trim engine itself. */
.access-network-dock .access-trim-surface,
#inbox .access-trim-surface,
#network-quick .access-trim-surface,
#thread .access-trim-surface,
#requests .access-trim-surface{
  box-shadow:none!important;
  animation:none!important;
  border-color:inherit!important;
}
/* Ring anchors inside messaging must not reserve ring spacing. */
.access-network-dock .access-ring-anchor,
#inbox .access-ring-anchor,
#network-quick .access-ring-anchor,
#thread .access-ring-anchor,
#requests .access-ring-anchor{
  overflow:visible;
}

/* ==========================================================
   DOCK PERSISTENT CONVERSATION LIST
   Separate from .access-network-dock-search-results, which is an
   absolutely-positioned dropdown used only while searching. This is a
   normal in-flow list so the dock shows the same conversations as the
   full Network page without floating over the thread.
   ========================================================== */
.access-network-dock-list{
  max-height:170px;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
  border-bottom:1px solid #e3e3e3;
  background:#fafafa;
  flex:0 0 auto;
}
.access-network-dock-list:empty{display:none}
.access-network-dock-list[hidden]{display:none!important}
/* When a conversation is open the thread needs the room, so the list
   collapses to a shorter scrollable strip rather than disappearing. */
.access-network-dock.has-active-chat .access-network-dock-list{max-height:96px}
@media (max-height:560px) and (orientation:landscape){
  .access-network-dock-list{max-height:84px}
  .access-network-dock.has-active-chat .access-network-dock-list{max-height:60px}
}


/* v3.1 — MOBILE PORTRAIT COMPOSER VISIBILITY FIX
   Scope: dock sizing only. Keep contacts + thread scrollable and composer always reachable. */
@media(max-width:650px) and (orientation:portrait){
  .access-network-dock{
    bottom:0;
  }
  .access-network-dock-card{
    max-height:calc(100dvh - 8px);
    display:flex;
    flex-direction:column;
  }
  .access-network-dock-head{
    flex:0 0 48px;
  }
  .access-network-dock-body{
    height:min(54dvh,520px);
    max-height:calc(100dvh - 56px);
    min-height:0;
    overflow:hidden;
    flex:1 1 auto;
  }
  .access-network-dock-inbox{
    max-height:112px;
    flex:0 0 auto;
  }
  .access-network-dock-thread-head{
    flex:0 0 auto;
  }
  .access-network-dock-thread{
    flex:1 1 auto;
    min-height:0;
    overflow-y:auto;
    -webkit-overflow-scrolling:touch;
  }
  .access-network-dock-request-decision,
  .access-network-dock-replybar{
    flex:0 0 auto;
  }
  .access-network-dock-compose{
    flex:0 0 auto;
    position:relative;
    z-index:4;
    padding:7px 7px max(8px,env(safe-area-inset-bottom));
    background:#fff;
  }
  .access-network-dock-compose textarea{
    min-height:44px;
    max-height:72px;
  }
}

/* Short portrait phones / browser chrome consuming extra viewport height. */
@media(max-width:650px) and (orientation:portrait) and (max-height:760px){
  .access-network-dock-body{
    height:min(50dvh,430px);
  }
  .access-network-dock-inbox{
    max-height:92px;
  }
  .access-network-dock-thread-head{
    padding:7px 9px;
  }
  .access-network-dock-thread{
    padding:8px;
  }
}

/* v3.2 — MOBILE PORTRAIT COMPOSER HARD FIX
   CSS-only. The composer is an explicit final grid row, so message history
   shrinks/scrolls instead of pushing the text box below the viewport. */
@media(max-width:650px) and (orientation:portrait){
  .access-network-dock{
    bottom:max(0px,env(safe-area-inset-bottom));
    max-height:calc(100svh - 8px);
  }

  .access-network-dock-card{
    max-height:calc(100svh - 8px);
    overflow:hidden;
  }

  .access-network-dock-body{
    /* Keep the open dock comfortably above Safari's bottom chrome. */
    height:min(48svh,440px)!important;
    max-height:calc(100svh - 64px)!important;
    min-height:330px;
    box-sizing:border-box;
    display:grid!important;
    grid-template-rows:
      auto  /* request strip */
      auto  /* recent chats */
      auto  /* search */
      auto  /* canonical contact list */
      auto  /* diagnostic/status */
      auto  /* active chat header */
      minmax(0,1fr) /* message history */
      auto  /* typing */
      auto  /* request decision */
      auto  /* reply bar */
      auto; /* composer */
    overflow:hidden!important;
  }

  .access-network-dock-request-strip,
  .access-network-dock-recent,
  .access-network-dock-search-wrap,
  .access-network-dock-list,
  .access-network-dock-diag,
  .access-network-dock-thread-head,
  .access-network-dock-typing,
  .access-network-dock-request-decision,
  .access-network-dock-replybar,
  .access-network-dock-compose{
    min-height:0;
  }

  /* Keep contacts useful but compact when a conversation is open. */
  .access-network-dock-list{
    max-height:88px!important;
    overflow-y:auto!important;
    -webkit-overflow-scrolling:touch;
  }
  .access-network-dock.has-active-chat .access-network-dock-list{
    max-height:88px!important;
  }

  .access-network-dock-thread{
    min-height:0!important;
    height:auto!important;
    overflow-y:auto!important;
    -webkit-overflow-scrolling:touch;
    overscroll-behavior:contain;
  }

  .access-network-dock-compose{
    display:flex!important;
    position:relative!important;
    bottom:auto!important;
    left:auto!important;
    right:auto!important;
    flex:0 0 auto!important;
    z-index:20;
    box-sizing:border-box;
    padding:7px 7px max(9px,env(safe-area-inset-bottom))!important;
    background:#fff!important;
    border-top:1px solid #ddd;
  }

  .access-network-dock-compose[hidden]{
    display:none!important;
  }

  .access-network-dock-compose textarea{
    min-height:44px!important;
    max-height:64px!important;
    font-size:16px!important;
  }
}

/* Extra-short portrait viewport: reduce contacts, never the composer. */
@media(max-width:650px) and (orientation:portrait) and (max-height:760px){
  .access-network-dock-body{
    height:min(44svh,390px)!important;
    min-height:300px;
  }
  .access-network-dock-list,
  .access-network-dock.has-active-chat .access-network-dock-list{
    max-height:66px!important;
  }
  .access-network-dock-diag{
    display:none!important;
  }
}

/* ==========================================================
   v3.2 — COMPOSER ALWAYS VISIBLE (all viewports)
   The dock body carried a fixed height:520px. With the header, search,
   conversation list and thread-head stacked above it, the composer fell
   below the fold on phones — and on iOS it sat under the browser
   toolbar because bottom:0 ignores the safe-area inset.
   The card is now a flex column bounded by the dynamic viewport, the
   thread is the only element allowed to absorb leftover space, and the
   composer is pinned as a fixed-size final row.
   ========================================================== */
.access-network-dock{
  bottom:env(safe-area-inset-bottom,0px);
}
.access-network-dock-card{
  display:flex;
  flex-direction:column;
  max-height:calc(100dvh - env(safe-area-inset-bottom,0px) - 8px);
}
.access-network-dock-head{flex:0 0 auto}
.access-network-dock-body{
  /* replaces the fixed 520px so the dock can never exceed the viewport */
  height:auto;
  flex:1 1 auto;
  min-height:0;
  display:flex;
  flex-direction:column;
  overflow:hidden;
}
.access-network-dock-search-wrap{flex:0 0 auto}
.access-network-dock-list{flex:0 0 auto}
.access-network-dock-thread-head{flex:0 0 auto}
/* Only the thread absorbs remaining space. */
.access-network-dock-thread{
  flex:1 1 auto;
  min-height:60px;
  overflow-y:auto;
  -webkit-overflow-scrolling:touch;
}
/* The composer is never allowed to shrink or scroll out of view. */
.access-network-dock-compose{
  flex:0 0 auto;
  position:relative;
  z-index:3;
  background:#fff;
  padding-bottom:max(6px,env(safe-area-inset-bottom,0px));
}

@media(max-width:650px) and (orientation:portrait){
  /* Give the thread room by trimming the list when a chat is open. */
  .access-network-dock-card{max-height:calc(100dvh - env(safe-area-inset-bottom,0px) - 6px)}
  .access-network-dock-list{max-height:132px}
  .access-network-dock.has-active-chat .access-network-dock-list{max-height:96px}
  .access-network-dock-thread{min-height:120px}
}
@media(max-height:560px) and (orientation:landscape){
  .access-network-dock-list{max-height:70px}
  .access-network-dock.has-active-chat .access-network-dock-list{max-height:52px}
  .access-network-dock-thread{min-height:70px}
}

/* ==========================================================
   v3.3 — READING ROOM
   With a conversation open the dock was stacking five rows above the
   thread (recent strip, search, conversation list, thread head) leaving
   almost no space to read messages, and on iOS the composer could still
   sit behind Safari's bottom toolbar.
   When a chat is active the browse chrome collapses so the thread gets
   the space, and the composer reserves room for the toolbar.
   ========================================================== */

/* Reading a conversation: collapse browse chrome. */
.access-network-dock.has-active-chat .access-network-dock-recent,
.access-network-dock.has-active-chat .access-network-dock-recent-wrap{
  display:none!important;
}
.access-network-dock.has-active-chat .access-network-dock-search-wrap{
  padding-top:4px;
  padding-bottom:4px;
}
.access-network-dock.has-active-chat .access-network-dock-list{
  max-height:74px!important;
}
.access-network-dock.has-active-chat .access-network-dock-thread{
  min-height:200px;
}

/* iOS: Safari's bottom toolbar overlays fixed elements. dvh tracks it,
   but reserve real space so the composer is never underneath. */
.access-network-dock-compose{
  padding-bottom:max(10px,calc(env(safe-area-inset-bottom,0px) + 8px));
}
@supports(-webkit-touch-callout:none){
  .access-network-dock-card{
    max-height:calc(100dvh - env(safe-area-inset-bottom,0px) - 14px);
  }
  .access-network-dock-compose{
    padding-bottom:max(14px,calc(env(safe-area-inset-bottom,0px) + 10px));
  }
}

@media(max-width:650px) and (orientation:portrait){
  .access-network-dock.has-active-chat .access-network-dock-list{max-height:70px!important}
  .access-network-dock.has-active-chat .access-network-dock-thread{min-height:220px}
  /* Thread head is informational; keep it compact while reading. */
  .access-network-dock.has-active-chat .access-network-dock-thread-head{
    padding-top:6px;
    padding-bottom:6px;
  }
}
@media(max-height:560px) and (orientation:landscape){
  .access-network-dock.has-active-chat .access-network-dock-list{max-height:44px!important}
  .access-network-dock.has-active-chat .access-network-dock-thread{min-height:90px}
}


/* v3.4 — DESKTOP MINI DOCK SIZE + MEMBER SEARCH REPAIR
   Desktop only. Preserve all phone/tablet geometry. */
@media (min-width:761px){
  .access-network-dock{
    width:360px;
    right:18px;
  }
  .access-network-dock.minimized{width:300px}
  .access-network-dock-card{
    height:auto;
    max-height:min(610px,calc(100vh - 92px));
  }
  .access-network-dock-body{
    flex:0 1 auto;
    height:min(540px,calc(100vh - 140px));
    max-height:min(540px,calc(100vh - 140px));
  }
  .access-network-dock.has-active-chat .access-network-dock-list{max-height:58px!important}
  .access-network-dock.has-active-chat .access-network-dock-thread{min-height:150px}
  .access-network-dock-search-results{
    max-height:260px!important;
  }
  .access-network-dock-thread-head{padding:8px 10px}
  .access-network-dock-thread-tools{gap:4px;flex-wrap:wrap;justify-content:flex-end}
  .access-network-dock-thread-tools button,
  .access-network-dock-openfull{font-size:8px}
}
.access-network-dock-result-label{
  padding:6px 10px 4px;
  background:#f4f4f4;
  border-bottom:1px solid #e4e4e4;
  color:#777;
  font:700 8px 'Space Mono',monospace;
  letter-spacing:.08em;
}
.access-network-dock-member-result{background:#fff}
.access-network-dock-member-result:hover{background:var(--network-accent-soft)}
.access-network-dock-start{
  font:700 7px 'Space Mono',monospace;
  letter-spacing:.04em;
  color:var(--network-accent-dark);
  white-space:nowrap;
}

/* Premium test: compact opening size, adjustable from the top-left, true bottom bar. */
.access-network-dock{left:auto!important;right:10px!important;bottom:env(safe-area-inset-bottom,0px)!important;width:min(var(--dock-width,300px),calc(100vw - 20px))!important;max-width:calc(100vw - 20px)!important;height:auto!important}
.access-network-dock .access-network-dock-card{display:flex!important;flex-direction:column;height:var(--dock-height,540px)!important;min-height:0!important;max-height:calc(100dvh - 90px)!important}
.access-network-dock .access-network-dock-head{position:relative;flex:0 0 48px;min-height:48px;padding-left:34px}
.access-network-dock .access-network-dock-body{display:flex!important;flex-direction:column;flex:1 1 auto!important;height:auto!important;min-height:0!important;max-height:none!important;overflow:auto}
.access-network-dock .access-network-dock-thread{flex:1 1 auto;min-height:60px!important;overflow:auto;overscroll-behavior:contain}
.access-network-dock .access-network-dock-thread-head{flex-wrap:wrap;gap:6px}
.access-network-dock .access-network-dock-thread-tools{flex-wrap:wrap;gap:5px}
.access-network-dock.minimized{width:min(260px,calc(100vw - 20px))!important}
.access-network-dock.minimized .access-network-dock-card{height:auto!important;min-height:0!important;max-height:none!important}
.access-network-dock.minimized .access-network-dock-body,.access-network-dock .access-network-dock-body[hidden]{display:none!important}
.access-network-dock-resize{position:absolute;left:3px;top:8px;width:28px;height:32px;padding:7px;border:0;background:transparent;color:var(--network-accent,#c9a84c);cursor:nwse-resize;touch-action:none}
.access-network-dock-resize svg{display:block;width:12px;height:12px}
.access-network-dock-resize:focus-visible{outline:2px solid currentColor;outline-offset:-2px;border-radius:4px}
.access-network-dock.minimized .access-network-dock-resize{display:none}
.access-network-dock.minimized .access-network-dock-head{padding-left:14px}
.access-network-dock.is-resizing{user-select:none}
