*{box-sizing:border-box}body{color:#111827;background:#eef2ff;margin:0;font-family:Arial,sans-serif}button,input{font:inherit}button{cursor:pointer;border:none}.auth-page{justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex}.auth-card{background:#fff;border-radius:18px;width:100%;max-width:420px;padding:28px;box-shadow:0 20px 50px #0f172a26}.auth-card h1{text-align:center;margin:0;font-size:36px}.auth-subtitle{text-align:center;color:#64748b;margin-bottom:24px}.auth-card label{margin:14px 0 6px;font-weight:700;display:block}.auth-card input{border:1px solid #cbd5e1;border-radius:12px;outline:none;width:100%;padding:12px 14px}.auth-card button{color:#fff;background:#4f46e5;border-radius:12px;width:100%;margin-top:18px;padding:12px 14px;font-weight:700}.switch-auth{text-align:center;color:#64748b}.switch-auth span{color:#4f46e5;cursor:pointer;font-weight:700}.error-box,.socket-error{color:#991b1b;background:#fee2e2;border-radius:12px;margin:12px 0;padding:12px}.chat-page{flex-direction:column;min-height:100vh;display:flex}.navbar{background:#fff;border-bottom:1px solid #e2e8f0;justify-content:space-between;align-items:center;gap:18px;height:76px;padding:12px 22px;display:flex}.navbar h2,.navbar p{margin:0}.navbar p{color:#64748b;font-size:14px}.nav-user{align-items:center;gap:12px;display:flex}.nav-user small{color:#64748b;display:block}.avatar-box,.small-avatar{color:#fff;background:#4f46e5;border-radius:999px;flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:flex;overflow:hidden}.avatar-box{cursor:pointer;width:44px;height:44px}.small-avatar{width:36px;height:36px}.avatar-box img,.small-avatar img{object-fit:cover;width:100%;height:100%}.logout-btn{color:#fff;background:#ef4444;border-radius:10px;padding:10px 12px;font-weight:700}.chat-layout{flex:1;grid-template-columns:280px 1fr;gap:18px;min-height:0;padding:18px;display:grid}.online-panel,.chat-panel{background:#fff;border-radius:18px;min-height:0;box-shadow:0 10px 30px #0f172a14}.online-panel{padding:18px;overflow-y:auto}.online-list{flex-direction:column;gap:12px;display:flex}.online-user{align-items:center;gap:10px;display:flex}.online-user small{color:#64748b;display:block}.chat-panel{flex-direction:column;display:flex;overflow:hidden}.message-list{flex-direction:column;flex:1;gap:14px;padding:18px;display:flex;overflow-y:auto}.message-row{align-items:flex-end;gap:10px;display:flex}.message-row.mine{justify-content:flex-end}.message-bubble{background:#f1f5f9;border-radius:16px;max-width:min(620px,75%);padding:10px 12px}.message-row.mine .message-bubble{color:#fff;background:#4f46e5}.sender-name{margin-bottom:4px;font-size:14px;display:block}.message-bubble p{white-space:pre-wrap;word-break:break-word;margin:0 0 6px}.message-bubble small{opacity:.75;margin-top:4px;font-size:12px;display:block}.file-message img{border-radius:12px;max-width:260px;max-height:260px;display:block}.file-link{color:inherit;font-weight:700}.message-input{border-top:1px solid #e2e8f0;gap:10px;padding:14px;display:flex}.message-input input{border:1px solid #cbd5e1;border-radius:999px;outline:none;flex:1;padding:12px 14px}.file-btn,.message-input button{border-radius:999px;justify-content:center;align-items:center;min-width:46px;height:46px;display:flex}.file-btn{cursor:pointer;background:#e0e7ff}.message-input button{color:#fff;background:#4f46e5;padding:0 20px;font-weight:700}.socket-error{margin:12px 18px 0}@media (width<=768px){.navbar{flex-direction:column;align-items:flex-start;height:auto}.chat-layout{grid-template-columns:1fr}.online-panel{max-height:180px}.message-bubble{max-width:85%}}.file-link-btn{color:inherit;text-align:left;cursor:pointer;word-break:break-word;background:0 0;border:none;padding:0;font-weight:700;text-decoration:underline}.message-footer{justify-content:flex-end;align-items:center;gap:8px;margin-top:4px;display:flex}.message-status{font-weight:700}.revoke-btn{color:inherit;opacity:.8;background:0 0;margin-top:6px;padding:0;font-size:12px;text-decoration:underline}.revoked-message{opacity:.75;font-style:italic}:root{--leaf-dark:#1f4d2b;--leaf-main:#2f7d32;--leaf-soft:#e8f5e9;--leaf-light:#f4fbf4;--rice-green:#8bc34a;--earth-brown:#5d4037;--earth-soft:#f3eadb;--cream-bg:#f7f3e8;--card-bg:#fff;--text-main:#1f2933;--text-muted:#667085;--danger:#c62828;--danger-bg:#ffebee;--border:#d7e3d2;--shadow:#1f4d2b1f}body{background:radial-gradient(circle at top left, #8bc34a2e, transparent 35%), linear-gradient(135deg, var(--cream-bg), #eef7ea);color:var(--text-main)}.auth-page{background:linear-gradient(#1f4d2b1a, #1f4d2b0d), var(--cream-bg)}.auth-card{border:1px solid var(--border);box-shadow:0 24px 60px var(--shadow);background:#fffffff5}.auth-card h1{color:var(--leaf-dark);letter-spacing:.5px}.auth-subtitle{color:var(--earth-brown)}.auth-card label{color:var(--leaf-dark)}.auth-card input{border:1px solid var(--border);background:var(--leaf-light)}.auth-card input:focus{border-color:var(--leaf-main);box-shadow:0 0 0 3px #2f7d3224}.auth-card button{background:linear-gradient(135deg, var(--leaf-main), var(--leaf-dark));color:#fff;box-shadow:0 10px 22px #2f7d3240}.auth-card button:hover{filter:brightness(1.05)}.switch-auth span{color:var(--leaf-main)}.error-box,.socket-error{background:var(--danger-bg);color:var(--danger);border:1px solid #c628282e}.navbar{background:linear-gradient(135deg, var(--leaf-dark), var(--leaf-main));color:#fff;border-bottom:none;box-shadow:0 8px 24px #1f4d2b33}.navbar h2{color:#fff}.navbar p{color:#ffffffc7}.nav-user strong{color:#fff}.nav-user small{color:#ffffffbf}.logout-btn{color:#fff;background:#ffffff29;border:1px solid #ffffff4d}.logout-btn:hover{background:#ffffff3d}.avatar-box,.small-avatar{background:linear-gradient(135deg, var(--rice-green), var(--leaf-main));color:#fff;border:2px solid #ffffffb3}.chat-layout{background:0 0}.online-panel,.chat-panel{border:1px solid var(--border);box-shadow:0 18px 45px var(--shadow);background:#fffffff5}.online-panel h3{color:var(--leaf-dark);border-bottom:1px solid var(--border);margin-top:0;padding-bottom:12px}.online-user{background:var(--leaf-light);border:1px solid #0000;border-radius:14px;padding:10px}.online-user:hover{border-color:var(--border);background:var(--leaf-soft)}.online-user strong{color:var(--leaf-dark)}.online-user small{color:var(--text-muted)}.message-list{background:radial-gradient(circle at 100% 0,#8bc34a21,#0000 28%),linear-gradient(#fbfff8,#f7f3e8)}.message-bubble{color:var(--text-main);border:1px solid var(--border);background:#fff;box-shadow:0 8px 18px #1f4d2b14}.message-row.mine .message-bubble{background:linear-gradient(135deg, var(--leaf-main), var(--leaf-dark));color:#fff;border:none}.sender-name{color:var(--leaf-dark)}.message-row.mine .sender-name{color:#fff}.message-footer small{color:inherit;opacity:.75}.message-status{color:inherit;opacity:.9}.file-message img{border:2px solid #fff9;box-shadow:0 8px 18px #00000014}.file-link-btn{color:inherit;background:#8bc34a29;border:1px solid #8bc34a47;border-radius:10px;padding:8px 10px;text-decoration:none}.message-row.mine .file-link-btn{background:#ffffff29;border-color:#ffffff40}.file-link-btn:hover{filter:brightness(1.05)}.revoke-btn{color:inherit;opacity:.7}.revoke-btn:hover{opacity:1}.revoked-message{color:inherit;opacity:.7}.message-input{border-top:1px solid var(--border);background:#fff}.message-input input{background:var(--leaf-light);border:1px solid var(--border)}.message-input input:focus{border-color:var(--leaf-main);box-shadow:0 0 0 3px #2f7d321f}.file-btn{background:var(--earth-soft);color:var(--earth-brown);border:1px solid #e0cfb8}.file-btn:hover{background:#eadcc6}.message-input button{background:linear-gradient(135deg, var(--leaf-main), var(--leaf-dark));color:#fff;box-shadow:0 8px 16px #2f7d3238}.message-input button:hover{filter:brightness(1.05)}.message-input button:disabled{opacity:.65;cursor:not-allowed}.message-list::-webkit-scrollbar{width:8px}.online-panel::-webkit-scrollbar{width:8px}.message-list::-webkit-scrollbar-thumb{background:#2f7d3259;border-radius:999px}.online-panel::-webkit-scrollbar-thumb{background:#2f7d3259;border-radius:999px}.message-list::-webkit-scrollbar-track{background:0 0}.online-panel::-webkit-scrollbar-track{background:0 0}@media (width<=768px){.navbar{background:linear-gradient(160deg, var(--leaf-dark), var(--leaf-main))}.online-panel{border-left:4px solid var(--leaf-main)}.message-bubble{max-width:88%}}.online-toggle,.logout-icon{display:none}@media (width<=768px){body{overflow:hidden}.chat-page{height:100vh;overflow:hidden}.navbar{z-index:50;flex-direction:row;align-items:center;gap:10px;height:64px;padding:8px 12px;position:sticky;top:0}.nav-brand{min-width:0}.nav-brand h2{font-size:20px;line-height:1}.nav-brand p{display:none}.nav-user{gap:8px;min-width:0;margin-left:auto}.nav-user-info{display:none}.avatar-box{width:38px;height:38px}.logout-btn{border-radius:999px;width:38px;min-width:38px;height:38px;padding:0;font-size:18px}.logout-text{display:none}.logout-icon{font-weight:900;display:inline}.chat-layout{flex-direction:column;gap:10px;height:calc(100vh - 64px);padding:10px;display:flex;overflow:hidden}.online-panel{border-radius:14px;flex:none;width:100%;max-height:none;padding:0;position:relative;overflow:hidden;box-shadow:0 8px 18px #1f4d2b1a}.online-toggle{background:linear-gradient(135deg, var(--leaf-main), var(--leaf-dark));color:#fff;border:none;justify-content:space-between;align-items:center;gap:8px;width:100%;height:46px;padding:0 14px;font-weight:700;display:flex}.online-toggle strong{background:#ffffff2e;border-radius:999px;margin-left:auto;padding:4px 10px}.online-arrow{opacity:.85;font-size:12px}.online-body{background:#fff;padding:12px;display:none}.online-panel.open .online-body{display:block}.online-body h3{display:none}.online-list{gap:8px;max-height:180px;overflow-y:auto}.online-user{padding:8px}.empty-online{color:var(--text-muted);text-align:center;margin:0;padding:10px}.chat-panel{border-radius:16px;flex:1;min-height:0}.message-list{padding:12px}.message-input{gap:8px;padding:10px}.message-input input{min-width:0;height:44px;padding:10px 12px}.file-btn,.message-input button{min-width:44px;height:44px}.message-input button{padding:0 14px}.message-bubble{border-radius:14px;max-width:82%}.file-message img{max-width:210px;max-height:210px}}
