*{box-sizing:border-box;margin:0;padding:0;font-family:"Segoe UI",system-ui,-apple-system,Roboto,Arial,sans-serif}
:root{--wa-dark:#075E54;--wa-green:#008069;--wa-light:#25D366;--bg:#e5ddd5;--out:#d9fdd3;--in:#fff;--tick:#53bdeb}
html,body{height:100%;background:#0b141a}
#app{display:flex;height:100dvh;max-width:1400px;margin:0 auto;background:var(--bg);box-shadow:0 0 30px rgba(0,0,0,.4)}
/* Sidebar */
#sidebar{width:340px;background:#fff;display:none;flex-direction:column;border-right:1px solid #ddd}
body.owner #sidebar{display:flex}
.side-header{background:#f0f2f5;padding:10px 14px;display:flex;align-items:center;justify-content:space-between}
.me{display:flex;gap:10px;align-items:center}
.avatar{width:42px;height:42px;border-radius:50%;background:#dfe5e7;display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0}
.owner-avatar{background:gold}
.me-name{font-weight:600}.me-sub{font-size:12px;color:#667781}
.search{padding:8px;background:#f0f2f5}.search input{width:100%;padding:8px 12px;border-radius:8px;border:0;background:#fff;outline:none}
#userList{flex:1;overflow-y:auto}
.user-row{display:flex;gap:12px;padding:12px 14px;cursor:pointer;border-bottom:1px solid #f0f2f5;align-items:center}
.user-row:hover{background:#f5f6f6}.user-row.active{background:#e9edef}
.user-row .avatar{background:#cfe9ff}
.u-info{flex:1;min-width:0}.u-top{display:flex;justify-content:space-between}.u-name{font-weight:600;font-size:15px}.u-time{font-size:11px;color:#667781}
.u-last{font-size:13px;color:#667781;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.badge{background:var(--wa-light);color:#fff;font-size:11px;min-width:20px;height:20px;border-radius:10px;display:flex;align-items:center;justify-content:center;padding:0 6px}
.side-foot{padding:10px;font-size:11px;color:#8696a0;text-align:center}
/* Chat pane */
#chatPane{flex:1;display:flex;flex-direction:column;min-width:0}
#chatHeader{background:var(--wa-dark);color:#fff;padding:8px 12px;display:flex;align-items:center;gap:10px}
#chatPane .avatar{background:rgba(255,255,255,.25)}
.chat-title{flex:1;min-width:0}#chatName{font-weight:600}#chatStatus{font-size:12px;opacity:.85;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.header-actions{display:flex;gap:4px}
.icon-btn{border:0;background:transparent;font-size:20px;cursor:pointer;color:inherit;padding:8px;border-radius:50%}
.icon-btn:hover{background:rgba(0,0,0,.08)}#chatHeader .icon-btn:hover{background:rgba(255,255,255,.15)}
.only-mobile{display:none}
#messages{flex:1;overflow-y:auto;padding:18px 12px 8px;background-color:var(--bg);background-image:radial-gradient(#d4cec5 1px,transparent 1px);background-size:22px 22px;display:flex;flex-direction:column;gap:6px}
.day{display:flex;justify-content:center;margin:8px 0}.day span{background:#fff;color:#54656f;font-size:12px;padding:5px 12px;border-radius:8px;box-shadow:0 1px 1px rgba(0,0,0,.15)}
.msg{max-width:78%;padding:7px 9px 5px;border-radius:8px;font-size:14.5px;line-height:1.4;position:relative;box-shadow:0 1px 1px rgba(0,0,0,.2);word-break:break-word}
.msg.in{background:var(--in);align-self:flex-start;border-top-left-radius:0}
.msg.out{background:var(--out);align-self:flex-end;border-top-right-radius:0}
.msg .sender{font-size:12px;font-weight:700;color:var(--wa-green);margin-bottom:2px}
.msg img{max-width:260px;border-radius:6px;display:block;margin-bottom:4px;cursor:pointer}
.msg audio{width:230px;max-width:100%;margin:2px 0}
.file-card{display:flex;gap:10px;align-items:center;background:rgba(0,0,0,.05);padding:8px;border-radius:6px;text-decoration:none;color:#111;margin-bottom:4px}
.file-card .f-ico{font-size:24px}.file-card .f-name{font-size:13px;font-weight:600;word-break:break-all}
.meta{display:flex;justify-content:flex-end;gap:4px;font-size:11px;color:#667781;margin-top:2px}
.ticks{color:#8696a0}.ticks.read{color:var(--tick)}
#typingBar{padding:4px 16px;font-size:12px;color:#fff;background:var(--wa-green)}
.typing-bubble{display:flex;gap:5px;align-items:center;padding:12px 14px!important}
.tdot{width:8px;height:8px;border-radius:50%;background:#8696a0;animation:tbounce 1.2s infinite}
.tdot:nth-child(2){animation-delay:.15s}.tdot:nth-child(3){animation-delay:.3s}
@keyframes tbounce{0%,60%,100%{transform:none;opacity:.5}30%{transform:translateY(-5px);opacity:1}}
.hidden{display:none!important}
/* Recording */
#recBar{display:flex;align-items:center;gap:10px;background:#fff;padding:10px 14px;border-top:1px solid #ddd}
.rec-dot{width:12px;height:12px;background:red;border-radius:50%;animation:blink 1s infinite}
@keyframes blink{50%{opacity:.2}}
.rec-waves{display:flex;gap:3px;align-items:center;flex:1}.rec-waves span{width:4px;background:var(--wa-green);border-radius:2px;animation:wv 1s infinite ease-in-out}
.rec-waves span:nth-child(1){height:10px}.rec-waves span:nth-child(2){height:18px;animation-delay:.1s}.rec-waves span:nth-child(3){height:26px;animation-delay:.2s}.rec-waves span:nth-child(4){height:18px;animation-delay:.3s}.rec-waves span:nth-child(5){height:10px;animation-delay:.4s}
@keyframes wv{50%{transform:scaleY(.4)}}
#recCancel{border:1px solid #ccc;background:#fff;border-radius:20px;padding:8px 12px;cursor:pointer}
#recSend{background:var(--wa-green);color:#fff;border:0;border-radius:20px;padding:8px 16px;cursor:pointer}
/* Composer */
#composer{display:flex;align-items:center;gap:6px;background:#f0f2f5;padding:8px 10px}
#composer .icon-btn{color:#54656f}
#msgInput{flex:1;border:0;border-radius:24px;padding:12px 16px;font-size:15px;outline:none}
.mic{font-size:22px}.send{background:var(--wa-green)!important;color:#fff!important;width:44px;height:44px}
/* Modals */
#loginModal,#infoModal{position:fixed;inset:0;background:rgba(11,20,26,.75);display:flex;align-items:center;justify-content:center;z-index:50;padding:16px}
.login-card{background:#fff;border-radius:16px;padding:28px;width:100%;max-width:380px;text-align:center;box-shadow:0 10px 40px rgba(0,0,0,.4)}
.login-logo{font-size:48px}.login-logo-img{width:76px;height:76px;border-radius:20px;box-shadow:0 4px 16px rgba(7,94,84,.35)}.login-card h2{margin:6px 0}.muted{color:#667781;font-size:14px;margin-bottom:14px}
.login-card input{width:100%;padding:12px;margin:6px 0;border:1.5px solid #ddd;border-radius:10px;font-size:15px;outline:none}
.login-card input:focus{border-color:var(--wa-green)}
.login-card button#joinBtn,.login-card button#infoClose{width:100%;background:var(--wa-green);color:#fff;border:0;border-radius:10px;padding:13px;font-size:16px;cursor:pointer;margin-top:8px}
.link{background:none;border:0;color:var(--wa-green);cursor:pointer;margin-top:12px;font-size:14px}
.tiny{font-size:11.5px;color:#8696a0;margin-top:12px;line-height:1.5}
.how{text-align:left;font-size:14px;margin:12px 0 4px 18px;line-height:1.7}
#toast{position:fixed;bottom:90px;left:50%;transform:translateX(-50%);background:#111b21;color:#fff;padding:10px 18px;border-radius:24px;font-size:14px;z-index:99;box-shadow:0 4px 16px rgba(0,0,0,.4)}
#updateBar{position:fixed;bottom:76px;left:50%;transform:translateX(-50%);background:var(--wa-green);color:#fff;border:0;border-radius:24px;padding:11px 20px;font-size:14px;font-weight:600;z-index:98;cursor:pointer;box-shadow:0 4px 16px rgba(0,0,0,.35)}
/* Call overlay (WhatsApp style) */
#callOverlay{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center}
#callOverlay.hidden{display:none!important}
.call-bg{position:absolute;inset:0;background:linear-gradient(160deg,#0b141a,#075E54)}
.call-card{position:relative;text-align:center;color:#fff;width:100%;max-width:520px;padding:24px}
.call-avatar{width:84px;height:84px;border-radius:50%;background:rgba(255,255,255,.2);display:flex;align-items:center;justify-content:center;font-size:40px;margin:0 auto 10px}
#callName{font-size:22px;font-weight:700}#callStatus{opacity:.85;margin:4px 0 14px;font-size:14px}
.call-videos{position:relative;width:100%;max-width:480px;margin:0 auto 16px}
#remoteVideo{width:100%;max-height:52dvh;background:#000;border-radius:16px;object-fit:cover}
#localVideo{position:absolute;right:10px;bottom:10px;width:120px;height:170px;background:#222;border-radius:12px;object-fit:cover;border:2px solid #fff}
.call-btn{border:0;border-radius:24px;padding:12px 22px;font-size:16px;cursor:pointer;margin:4px}
.call-btn.accept{background:var(--wa-light);color:#fff}
.call-btn.decline{background:#ea0038;color:#fff}
.call-btn.small{background:rgba(255,255,255,.2);color:#fff}
.call-btn.small.off{background:#ea0038}
/* Instant camera modal */
#camModal{position:fixed;inset:0;background:rgba(11,20,26,.8);display:flex;align-items:center;justify-content:center;z-index:60;padding:16px}
#camModal.hidden{display:none!important}
.cam-card{max-width:440px!important}
.cam-stage{position:relative;background:#000;border-radius:12px;overflow:hidden;margin:10px 0;min-height:200px}
#camPreview,#camShot,#camClipPreview{width:100%;max-height:52dvh;object-fit:cover;display:block;background:#000}
#camRecTag{position:absolute;top:10px;left:10px;background:rgba(0,0,0,.6);color:#fff;font-size:13px;padding:5px 12px;border-radius:16px;display:flex;gap:7px;align-items:center}
#camLiveRow,#camReviewRow{display:flex;gap:8px;justify-content:center;margin-top:6px}
.cam-btn{border:1px solid #ddd;background:#f0f2f5;color:#111;border-radius:20px;padding:10px 16px;font-size:15px;cursor:pointer}
.cam-btn.primary{background:var(--wa-green);border-color:var(--wa-green);color:#fff;font-weight:600}
.msg video{outline:none}
/* Owner master-detail: contacts list first, tap opens chat, ← back returns */
body.owner.list-view #sidebar{display:flex;flex:1;width:auto;border-right:0}
body.owner.list-view #chatPane{display:none}
body.owner.chat-view #sidebar{display:none!important}
body.owner.chat-view #backBtn{display:block!important}
body:not(.owner) #backBtn{display:none}
#backBtn{position:relative}
#backBadge{position:absolute;top:0;right:0;background:#ea0038;color:#fff;font-size:10px;font-weight:700;min-width:18px;height:18px;line-height:18px;border-radius:9px;padding:0 4px;text-align:center}
@media(max-width:768px){
  body.owner.list-view #sidebar{position:static;width:100%;max-width:none;height:100dvh;box-shadow:none}
  .msg{max-width:88%}
}
body:not(.owner) #sidebar{display:none!important}
