:root { --bg: #0b1220; --panel: #101a2e; --line: #1d2c47; --ink: #dce8ff; --dim: #7d8fb0; --lake: #4fd8eb; --lake-deep: #1789a8; --me-bubble: #14384a; --peer-bubble: #1a2540; } * { box-sizing: border-box; margin: 0; padding: 0; } html, body { height: 100%; } body { display: flex; flex-direction: column; background: radial-gradient(1200px 600px at 70% -10%, #14263f 0%, var(--bg) 55%); color: var(--ink); font-family: "PingFang SC", "Hiragino Sans GB", system-ui, sans-serif; } header { display: flex; justify-content: space-between; align-items: center; padding: 12px 18px; border-bottom: 1px solid var(--line); background: rgba(16, 26, 46, 0.7); } .brand { display: flex; align-items: baseline; gap: 10px; } .lake-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--lake); box-shadow: 0 0 12px var(--lake); align-self: center; } h1 { font-size: 16px; font-weight: 600; letter-spacing: 1px; } .sub { font-size: 11px; color: var(--dim); } .who { display: flex; align-items: center; gap: 10px; font-size: 13px; color: var(--dim); } .conn { width: 9px; height: 9px; border-radius: 50%; background: #5a6a8a; } .conn.on { background: #58e6a8; box-shadow: 0 0 8px #58e6a8; } .conn.off { background: #e6645a; } main { flex: 1; display: flex; flex-direction: column; overflow: hidden; } #stream { flex: 1; overflow-y: auto; padding: 18px; display: flex; flex-direction: column; gap: 10px; } .msg { max-width: 72%; padding: 9px 13px; border-radius: 12px; font-size: 14px; line-height: 1.5; word-break: break-word; } .msg .meta { display: block; font-size: 11px; color: var(--dim); margin-bottom: 3px; } .msg.me { align-self: flex-end; background: var(--me-bubble); border: 1px solid #1f4f66; border-bottom-right-radius: 3px; } .msg.peer { align-self: flex-start; background: var(--peer-bubble); border: 1px solid var(--line); border-bottom-left-radius: 3px; } .msg .tick { color: var(--dim); font-size: 11px; margin-left: 6px; } .msg .tick.ok { color: #58e6a8; } .msg.sys { align-self: center; background: none; border: none; color: var(--dim); font-size: 12px; } #status-line { min-height: 22px; padding: 2px 18px; font-size: 12px; color: var(--dim); } #status-line.err { color: #e6645a; } footer { display: flex; gap: 10px; padding: 12px 18px; border-top: 1px solid var(--line); background: rgba(16, 26, 46, 0.7); } input { background: var(--panel); border: 1px solid var(--line); color: var(--ink); border-radius: 8px; padding: 10px 12px; font-size: 14px; outline: none; } input:focus { border-color: var(--lake-deep); } #peer { width: 150px; } #text { flex: 1; } button { background: linear-gradient(135deg, var(--lake-deep), #0e6d86); color: #eafcff; border: none; border-radius: 8px; padding: 10px 22px; font-size: 14px; cursor: pointer; } button:hover { filter: brightness(1.15); } button:disabled { opacity: 0.5; cursor: default; }